Базовое моделирование данных: мост «многие ко многим» - PullRequest
2 голосов
/ 30 марта 2011

Эта проблема, возможно, поднималась здесь раньше, но я не уверен, что понял решение. Вот проблема, в Objective C, Базовые Данные, для iOS.

Я собираюсь смоделировать отношения типа «подписчик - твиттер», один пользователь может следить за многими, а за ними следуют многие. Само Следующее имеет такие атрибуты, как createTime, pending и level - это означает, что я не могу просто позволить Пользователю иметь двунаправленные отношения, такие как follower и follow, например:

Пользователь << - >> Пользователь

но добавьте еще одну сущность Follow, с такими отношениями, как follow и follow.

Пользователь <- >> Подписан << -> Пользователь

Вот два вопроса:

  1. Это лучшая практика?

  2. Если это так, как записать [aUser valueForKeyPath: ...]; чтобы получить его / ее последователей или друзей (за которыми следят).

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Является ли это лучшей практикой?

Я не думаю, что эта проблема относится к категории "ситуаций, для которых была создана лучшая практика", но кажется, чторазумное решение.

Если да, то как написать [aUser valueForKeyPath: ...];чтобы получить его / ее последователей или друзей (за которыми следят).

Допустим, у Following есть свойство follower для человека, выполняющего следующие действия, и свойство leader для человекасоблюдаетсяКроме того, User имеет свойство leads для отношений Following с людьми, которые следуют за пользователем, и свойство follows для отношений Following с людьми, за которыми следует пользователь.Наконец, User также имеет свойство name.

Учитывая все это, чтобы получить имена подписчиков aUser, вы можете сказать:

NSSet * последователей = [aUser valueForKeyPath: @"lead.follower.name"];

и для получения имен людей aUser следует:

NSSet * leader = [aUser valueForKeyPath: @ "follow.leader.name"];

Поначалу кажется немного странным, что вы получаете наборы из этих ключевых путей, поскольку последние два ключа в каждом пути являются единичными.Однако, поскольку свойство leads возвращает набор объектов Following, leads.follower возвращает набор, содержащий пользователей для каждого из этих объектов, а leads.follower.name возвращает набор, содержащий имена пользователей этих объектов.

0 голосов
/ 25 января 2012

Я нашел отличный пример того, чего вы пытались достичь здесь, и подумал, что поделюсь.Отметьте здесь под заголовком «Отношения многие ко многим».Вы должны найти пример, использующий сущность Person и сущность FriendInfo, которые описывают шаблон, который вы используете более подробно.

Примечание. Ссылка на раздел «Отношения и извлеченные свойства» базового программирования данных Apple.Руководство, которое может или не может быть доступно тем, у кого нет учетной записи Apple Developer, и, конечно, может быть изменено.

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