Отношение многие ко многим с необязательным значением? - PullRequest
4 голосов
/ 12 февраля 2010

У меня есть отношение многие ко многим между двумя таблицами: Порядок и Предмет. Мне нужно сохранить дополнительную информацию об этих отношениях, количество.

Итак, мне нужно создать дополнительную таблицу в моей модели .xcdatamodel?

В следующей схеме оба orderItems имеют отношение ко многим к таблице OrderItem. order & item - обратные отношения.

Order (start, end, orderItems)
Item (name, orderItems)
OrderItem (quantity, order, item)

Отредактировано:

Итак, согласно Рэнди, это то, что вы предлагаете?

Order (start, end, orderItems)
Item (name, quantity, orders)

orderItems указывает на Item как отношение ко многим, обратное отношение - orders, orders указывает на Order как отношение ко многим

Ответы [ 3 ]

3 голосов
/ 12 февраля 2010

Я почти уверен, что вопрос, который вы задаете:

Итак, мне нужно создать дополнительную сущность в моей модели .xcdatamodel?

И ответ ДА. Вам нужен третий объект OrderItem.

Так же, как вы описали:

  1. У позиции заказа ровно один заказ и одна вещь.
  2. В заказах есть много элементов заказа, и элементы используются многими элементами заказа.

Order <- >> OrderItem << -> Item

Атрибут количества входит в сущность OrderItem.

Это не значит, что вы создаете дополнительную таблицу . Если вы используете SQLite для хранения, Core Data все равно будет использовать дополнительную таблицу для отношения «многие ко многим».

Как правило, с помощью Core Data вы разрабатываете и используете модель данных, соответствующую вашим потребностям. Вы не должны думать об этом с точки зрения SQL или таблиц. На самом деле, ему даже не нужно использовать SQL для хранения.

3 голосов
/ 12 февраля 2010

Нет необходимости создавать дополнительную таблицу. Допустимо иметь таблицу ассоциации M2M, которая содержит столбцы, отличные от ссылок FK на эти две таблицы. Иногда дополнительный столбец в таблице ассоциаций M2M имеет смысл.

0 голосов
/ 19 февраля 2010

У меня такая же проблема. Когда мы создаем отношение «многие ко многим» в Core Data, оно создает таблицу отношений, не так ли? Есть ли способ поместить информацию (атрибут отношения) в эту таблицу ???

Я уже думал о двух способах, но ни один из них не кажется лучшим. Пожалуйста, поправьте меня, если я ошибся ... Я тоже пытаюсь смоделировать свое приложение.

1) Это помогло решить проблему, но не использовать связывание «многие ко многим» из Core Data.

Order (start, end, orderItems)
Item (name, orderItems)
OrderItem (quantity, order, item)

Я предпочитаю это, потому что он не дублирует строки.

2) Так мы копируем данные, не так ли? Потому что, если у вас есть один и тот же элемент в более чем одном заказе, у вас есть более одной строки с информацией об имени. И проблема возрастет, если у элемента будет больше столбцов, таких как описание ... Описание будет реплицировано.

Order (start, end, orderItems) 
Item (name, quantity, orders)

3) Я сейчас читаю Руководство «Базовые данные» и подумал, что еще одна возможность: равно решению 2 в базе данных:

Order (start, end, orderedItens) 
Item (name, description, ...)
OrderedItem (quantity, order)

Родитель OrderedItem = Item

                Item
                 ^
                 |
 Order <--->> OrderedItem

Модель в http://www.freeimagehosting.net/uploads/f6ca00bc2f.png

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