处理 CloudKit 中的多对多关系

Handle many-to-many relations in CloudKit

我正在尝试使用 CloudKit 创建一个标记系统。 我有一个名为 Article 的类型和一个名为 Tag 的标签类型。 每篇文章可以应用多个标签。我希望我的数据被规范化,因为相同的标签可以出现在多篇文章上,而文章可以有多个标签,我需要多对多的关系。 在老式数据库中,这需要一个连接点 table.

在 CloudKit 你是怎么做到的?

在 Apple 的任何文档中,我只能找到一对多关系的示例。

所以我创建了一个名为 ArticleTag 的联结-table 类型,它由两个 CKReferences 组成。一篇用于文章参考,一篇用于标签参考。

这应该可行,但查询每篇文章标签的最佳方式是什么?

亲切的问候, 埃斯本

目前没有任何机制可以像传统关系数据库那样在 CloudKit 中执行 "join" 查询,但是您应该能够通过使用类型为 "Reference List" 在您的文章上。让我们假设如下:

  1. 您的文章记录类型有一个 "tags" 类型参考列表的字段。您可以在 CloudKit Dashboard.
  2. 中进行设置
  3. 您有一个标签记录类型
  4. 标记文章时,首先查找(并可能创建)每个标记的标记记录,然后使用每个标记记录 ID 将 CKReference 添加到 Article.tags 列表字段。

然后您可以使用标签字段中的 ID 查找文章的标签,您可以使用标签记录 ID 和使用 CONTAINS 操作的 CKQuery 谓词找到所有标记有特定标签的文章检查列表成员。