CoreData моделирует обратную зависимость - PullRequest
1 голос
/ 07 апреля 2011

В документации Apple предлагается использовать обратные отношения при моделировании моделей данных в CoreData.

У меня есть следующий пример:

Книга (сущность) имеет несколько «страниц» и одну «frontCover» и одну «backCover».Страница (сущность) находится в одной «книге» (поэтому «книга» является обратной к «страницам»).

Хорошо, пока это стандартный случай ... НО теперь моя проблема:

У меня только один класс Cover (Entity).Обложка (сущность) находится на одной «книге».На этой «книге» Обложка ЛИБО «frontCover» ИЛИ «backCover».Таким образом, обратное значение для "book" равно EITHER "frontCover" или "backCover".

Это не может быть смоделировано в CoreData.Отношения могут быть обратными только одному отношению, но не ЛЮБОГО этого ИЛИ этого отношения.

Как лучше всего это смоделировать?Однонаправленные отношения (без инверсий)?

Спасибо за ваши ответы, Крис

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Вы можете сделать что-то вроде модели ниже (первое изображение). Это оставило бы обратные отношения Cover на ноль. Однако, мне это не кажется правильным.

Другим вариантом (второе изображение) было бы дать Книге отношение 'cover', которое ссылается на 2 объекта Cover, и дать Cover логический атрибут isFront. Это позволило бы установить обратную связь, называемую «книга».

enter image description here

enter image description here

2 голосов
/ 07 апреля 2011

Одним из способов сделать это может быть создание Cover как «абстрактного» объекта с двумя подчиненными объектами - FrontCover и BackCover.Тогда вы могли бы создать отношения и обратно для каждого из них.

0 голосов
/ 25 октября 2012

Я просто хочу добавить.

Один способ состоит в том, чтобы иметь 2 сущности.Но это полезно только в том случае, если FrontCover и BackCover сильно различаются.

Если они абсолютно одинаковые объекты, вам следует вместо этого использовать перечисление в сущностях.

Это перечисление различает, является ли обложка frontCoverили BackCover.

Затем вы устанавливаете отношение «1 ко многим» от книги к обложке.

Цель coredata - сохранить ваши данные.В любом случае, ваша логика должна быть в коде.

Создание двух дочерних объектов также практически совпадает с ответом westSider.Подсубъекты просто добавляют другое отношение к исходному.

...