在 CloudKit 中处理多对多关系

Posted

技术标签:

【中文标题】在 CloudKit 中处理多对多关系【英文标题】:Handle many-to-many relations in CloudKit 【发布时间】:2015-07-07 19:18:14 【问题描述】:

我正在尝试使用 CloudKit 创建一个标记系统。 我有一个名为 Article 的类型和一个名为 Tag 的标签类型。 每篇文章都可以应用多个标签。我希望我的数据被规范化,因此由于相同的标签可以出现在多篇文章上,并且文章可以有多个标签,我需要一个多对多的关系。 在老式的数据库中,这需要一个联结表。

您如何在 CloudKit 中做到这一点?

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

所以我创建了一个名为 ArticleTag 的联结表类型,它包含两个 CKReference。一个用于文章参考,一个用于标签参考。

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

亲切的问候, 埃斯本

【问题讨论】:

【参考方案1】:

目前没有任何机制可以像传统的关系数据库那样在 CloudKit 中执行“加入”查询,但是您应该能够通过在文章中使用类型为“参考列表”的字段来完成您想要的操作。让我们假设以下内容:

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

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

【讨论】:

这正是我经过一番思考后最终做的事情。在 Apple 的文档中,ReferenceLists 并不那么清楚。我仍然对 CloudKit 工作得多么糟糕感到震惊。调制既慢又麻烦。你会认为数据库已经足够让 Apple 知道需要更先进的存储系统。

以上是关于在 CloudKit 中处理多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

(转)Hibernate框架基础——多对多关联关系映射

如何在 django 中处理未保存的多对多关系?

如何在 RESTful API 中处理多对多关系?

GraphQL Apollo 中的多对多关系

Python Graphene 处理多对多关系

用NHibernate处理带属性的多对多关系