2015-05-05 2 views
0

Единственными базами данных, с которыми я работал ранее, являются MySQL, поэтому дизайн базы данных CoreData меня немного сбивает с толку.Является ли этот шаблон подходящим для Core Data?

Вкратце, дизайн состоит из отношений «многие-ко-многим» между людьми и предприятиями. Многие люди могут владеть одним бизнесом. Один человек может владеть многими предприятиями.

В этом упрощенном дизайне, есть 3 таблицы:

PERSON  BUSINESS  OWNED BUSINESS 
------  --------  -------------- 
id   id   personID 
name   name   businessID 
email  website  acquisitionDate 

Таблица OwnedBusiness является тот, который меня смущает. В MySQL эта таблица используется для поддержки отношений «многие ко многим». Я понимаю, что CoreData не требует этого, однако у меня есть дополнительное поле в OwnedBusiness: acquisitionDate.


дополнительное поле, acquisitionDate гарантирует ли использование дополнительного объекта/таблицы? Если нет, то где это поле?

ответ

17

Во-первых, Core Data - это не база данных, полная остановка.

Основные данные - это структура управления графиком объектов, ваша модель в вашем приложении.

Это может упорствовать на диске в базе данных. Он также может сохраняться как двоичный, XML и почти все. Он даже не нужен для сохранения.

Подумайте о Core Data как о объектном графе. В вашем примере у вас будет объект Person, объект Business и объект OwnedBusiness.

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

+0

Большое спасибо. В последних двух параграфах описывается то, что у меня есть в модели (таблицы были только моим письменным дизайном); просто нужен был кто-то, чтобы проверить, что у меня было на правильном пути. –

+0

Сохраните уникальные идентификаторы для бизнеса и человека. Они всегда полезны. –

1

Так что, прежде всего, CoreData не является реляционным db, просто чтобы это исключить.

Во-вторых, я думаю, вы должны иметь быстрый взгляд на CoreData документации и так как вы знакомы с MySql это будет легкое чтение, и я думаю, вы будете отчасти поражен дополнительными функциями, которые CoreData предоставляет.

Отношения many-to-many, CoreData поддерживают эти отношения без дополнительных таблиц. Также отношения не основаны на id с, они основаны непосредственно на объектах.

Так что в вашем случае, вы не должны использовать лицо id & бизнес id создать отношения, вы можете создать отношения в Relationship разделе вашего xcdatamodel, то вы можете установить класс отношений (или назначение), обратная к этой взаимосвязи (полезная вещь) и, конечно, тип отношения (to-many to to one).

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

+0

'Не пытайтесь нормализовать базу данных ... вы потеряете часть производительности, нормализуя' - Действительно? У вас есть документы, подтверждающие это? –

+1

@JamesWebster Возможно, я выразил немного суровое, правильное выражение должно быть «не над нормализацией», и да, проверьте это сообщение http://asciiwwdc.com/2013/sessions/211, а также вы можете посмотреть полную сессию wwdc начиная с 2013 года. – danypata

+0

Поскольку Core Data сначала является графиком объекта, нормальная нормализация базы данных на самом деле вредна для производительности. Указатели, которые данипата дал вам, объяснят это более подробно. –

Смежные вопросы