2015-07-07 1 views
4

Я пытаюсь создать систему тегов с помощью CloudKit. У меня есть тип под названием Article и тег type Tag. В каждой статье могут быть применены несколько меток. Я хочу, чтобы мои данные были нормализованы, так как те же теги могут появляться на нескольких статьях, а статьи могут иметь несколько тегов, мне нужно отношение «многие ко многим». В старой школе DB-stuff для этого потребуется таблица соединений.Обрабатывать отношения «многие ко многим» в CloudKit

Как вы это делаете в CloudKit?

В любой документации на яблоки я могу найти только примеры отношений «один ко многим».

Таким образом, я создал тип таблицы соединений, называемый ArticleTag, который состоит из двух CKReferences. Один для ссылки на статью и один для ссылки на тег.

Это должно сработать, но каков наилучший способ запроса тегов на статью?

С наилучшими пожеланиями, Esben

ответ

4

Там не в настоящее время какой-либо механизм, чтобы сделать «присоединиться» запросы в CloudKit как традиционной реляционной базы данных, однако вы должны быть в состоянии сделать то, что вы хотите с помощью поля с введите «Список ссылок» в своих статьях. Предположим следующее:

  1. Тип записи вашей статьи имеет поле «теги» типа Reference List. Вы можете установить это в CloudKit Dashboard.
  2. У вас есть тип записи тега
  3. При пометке статьи вы сначала просматриваете (и потенциально создаете) запись тега для каждого тега, затем добавляете CKReference в поле списка Article.tags, используя каждую запись Tag идентификаторы.

Затем вы можете поиск тегов статьи, с помощью цифровых идентификаторов в поле тегов, и вы можете найти все статьи, помеченные определенный тег, используя ID тегов записи и CKQuery предиката, который использует СОДЕРЖИТ операцию для проверки список членов.

+2

Это именно то, что я в конечном итоге сделал после некоторого размышления. Справочники не так понятны в документации на Яблоки. Я все еще ошеломлен тем, как плохо работает CloudKit. Это медленная и громоздкая модуляция. Вы могли бы подумать, что баз данных было достаточно для Apple, чтобы знать, что необходима более совершенная система хранения. – esbenr

+0

@Dave Browning , когда я использовал CONTAINS с 2 тегами (ссылки) Я получил только записи, когда существуют теги BOTH. но мне нужно получить запись, даже если существует только один тег. любые идеи? – user1105951