Ссылка на CoreData - PullRequest
       2

Ссылка на CoreData

2 голосов
/ 03 октября 2010

Мое приложение основано на CoreData, но они могут быть общей теорией для всех реляционных баз данных:

В моей модели есть отношение «Выход-Вход ко многим». Потенциально существует неограниченное количество ссылок под этим отношением для каждой сущности. Каков наилучший способ определить конкретный вход или выход?

Единственный способ, которым я достиг этого, - это поместить промежуточную сущность в отношение, которое может содержать имя вывода и ввода. Затем сущность может циклически просматривать свои входы / выходы, чтобы найти правильные отношения, когда это необходимо. Есть ли способ лучше?

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

Извиняюсь, если мое описание не самое ясное.

Изменить в ответ на ответ ниже: Во-первых, спасибо за ваш ответ. Я, конечно, имею в виду двусторонние отношения слишком много. Но если у виджета есть 2 других виджета, связанных с его отношением Входы, каков наилучший способ определить, какие входные данные предоставляют, скажем, «Возраст» или «Служба Годы», когда оба могут иметь это свойство, но меня интересует только конкретное значение от каждого?

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Я смущен так же, как и Джошуа - что говорит мне о том, что, возможно, у вас нет четкой картины того, чего вы пытаетесь достичь, или что это несколько сложно (оба?)

Мое лучшее предположение, что у вас есть что-то вроде:

Виджет сущности Атрибуты:

  • идентификатор

Отношения

  • outputWidgets << - >> Widget
  • inputWidgets << - >> Widget

(где согласно стандарту a - >> - это отношение ко многим, а << - >> - это отношение ко многим с обратным отношением ко многим).

Таким образом, каждый виджет будет хранить набор виджетов, которые он имеет в качестве выходных данных, и набор виджетов, которые он имеет в качестве входных данных.

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

Хотя это чертовски уродливо.

Я думаю, что ваш вопрос заключается в том, как достичь вышеизложенного при обозначении отношений Вы упоминаете, что хотите иметь строковый идентификатор (уникальный?) Для каждого отношения.

Вы можете сделать это через:

screengrab

Где вы создаете новый widgetNamedRelationship для каждого двустороннего отношения. Обратите внимание, что я предполагаю, что все отношения являются двусторонними.

Тогда для каждого виджета у вас есть набор именованных входов и именованных выходов. Это также позволяет прикреплять виджеты к себе, но только если есть отдельные входные и выходные шины.

Итак, для вашего примера "age" в вашем классе реализации для экземпляра Widget с именем aWidget у вас будет что-то вроде:

NSPredicate * agePredicate = [NSPredicate finalateWithFormat: @ "name = 'age'"]; NSSet * ageInputs = [aWidget.inputs FilterSetUsingPredicate: agePredicate];

Понял ли я вопрос?

0 голосов
/ 05 октября 2010

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

Имейте в виду, что Core Data поддерживает отношения «многие ко многим» без «таблицы соединений».

Если Widget имеет много входов или выходов (которые, я подозреваю, может быть одним и тем же объектом), то двустороннее отношение «многие ко многим» (отношение с обратным, на языке Core Data) между Widget и Input равно все, что тебе нужно. Затем все, что вам нужно сделать, это посмотреть, находится ли ваш экземпляр Input в -inputs экземпляра Widget или если экземпляр Widget находится в -widgets экземпляра Input.

Это то, что вы искали? Если нет, попробуйте уточнить свой вопрос (не редактируя, а добавляя комментарии: -)).

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