Можем ли мы использовать объединение двух баз данных sqlite с одинаковыми таблицами для базовых данных? - PullRequest
1 голос
/ 25 мая 2010

У меня есть приложение для iPhone Core Data с предварительно заполненной базой данных sqlite. Могу ли я добавить вторую меньшую базу данных sqlite с теми же таблицами, что и у моей предварительно заполненной «базовой» базы данных, но с дополнительными / дополнительными данными, так что Core Data с радостью объединит данные из обеих баз данных и, в конечном итоге, представит мне, как будто все один источник данных?

Идея, которая у меня была:

1) база данных baseline никогда не изменяется.

2) Я могу загрузить меньшую «дополнительную» базу данных sqlite для получения дополнительных данных, когда и когда мне это нужно (я предполагаю, что загрузка базы данных sqlite разрешена, пожалуйста, прокомментируйте, если нет).

3) Базовые данные затем могут объединять данные из 1 и 2. Затем я могу ссылаться на эти унифицированные данные, вызывая мою определенную модель управляемых объектов Базовые данные.

Надеюсь, это имеет смысл.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 25 мая 2010

Базовые данные предназначены для обработки нескольких файлов данных с помощью метода – addPersistentStoreWithType:configuration:URL:options:error:. Это позволит вам объединить все файлы данных вместе, а затем получить к ним доступ через один NSManagedObjectContext.

Ваша единственная проблема, и она может даже не быть проблемой для вас, заключается в том, что файлы хранилища не могут напрямую ссылаться друг на друга. Поэтому вам нужно будет ссылаться на данные между файлами "вручную" через уникальные идентификаторы. Однако я подозреваю, что вы уже знаете об этом ограничении.

Ручные отношения

Идея состоит в том, что когда оба объекта в «отношениях» находятся в одной модели и одном файле, Core Data выполняет свою магию и обрабатывает всю ссылочную целостность за вас. Однако когда они находятся в разных файлах и / или моделях, это больше не происходит автоматически.

Решением этой проблемы является использование извлеченного свойства, которое ищет некоторый уникальный идентификатор для извлечения сущности (или сущностей), которой вы хотите быть на другой стороне отношения. Это даст вам «слабые» отношения между файлами.

Одна вещь, на которую следует обратить внимание, делая это. Свойство fetched не обновляется автоматически при изменении чего-либо. Это означает, что при изменении данных, которое может привести к изменению этих отношений, ваше приложение не будет автоматически уведомлено об этом, и вам нужно будет снова запросить это свойство, чтобы получить обновленную информацию о взаимоотношениях.

Надеюсь, это немного прояснит.

Сосуществование извлеченных свойств и отношений

Они могут определенно сосуществовать, но понимают, что это два отдельных свойства. Если вы хотите, чтобы код вашего контроллера воспринимал их как единое целое, я бы предложил создать подкласс для этой сущности, а затем добавить в него вспомогательный метод, который обрабатывает как отношение, так и извлекаемое свойство, а затем сворачивает их в один NSArray или NSSet перед возвратом к коду вашего контроллера.

0 голосов
/ 25 мая 2010

Вы можете присоединить загруженную базу данных с помощью оператора ATTACH DATABASE и работать с объединениями таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...