CoreData: как моделировать круговые отношения «многие ко многим» - PullRequest
3 голосов
/ 25 октября 2011

Пытался понять, как смоделировать циклическое отношение «ядро-данные» многие-ко-многим в Xcode 4.2. В SQL я использую таблицы сопоставления и настраиваю выражения SQL для предоставления мне нужных данных, но в Core data я не могу понять, как заставить его работать должным образом. У меня есть 3 сущности, которые все связаны друг с другом:

  • Отдел
  • Роль
  • лицо

Мои ссылки:

  • Отдел может иметь несколько ролей
  • Отдел может иметь несколько человек
  • Роль может присутствовать во многих отделах
  • Роли могут назначать многие люди
  • Человек может принадлежать к нескольким отделам
  • Человек может быть частью многих ролей

Каков наилучший способ смоделировать это с использованием базовых данных и какие побуждения, с какими отношениями между ними будут наиболее адекватными? Будете ли вы использовать таблицы сопоставления между этими 3 или просто назначить правильные отношения?

Любая помощь будет высоко оценена, так как я не могу понять это ...

EDIT: Большое спасибо за быструю обратную связь. К сожалению, я не могу загрузить свою модель данных, так как я новичок на этом сайте и не могу публиковать изображения.

Для чтения данных я в настоящее время использую только предикат, подобный этому:

predicate = [NSPredicate predicateWithFormat:@"personPartOfRoles == %@", myRole];

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

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Отдел << --- >> Роль (роли в отделах)
Отдел << --- >> Человек (отделы для людей)
Роль << - >> Человек (роли для людей)

Сделать каждое отношение обратным.

Помните, что базовые данные - это граф объектов, который может сохраняться в базе данных.Относитесь к нему как к графу объектов.

3 голосов
/ 25 октября 2011

Просто назначьте правильные отношения в ваших сущностях.

Если вы собираетесь использовать Core Data, важно игнорировать тот факт, что вы храните в SQLite. Хранилище - это просто скрытая деталь реализации (поскольку coredata способна хранить в XML или в памяти), о которой вы можете забыть.

...