使用核心数据在 ios 中建立一对多关系
Posted
技术标签:
【中文标题】使用核心数据在 ios 中建立一对多关系【英文标题】:Make a one to Many relationship in ios using core data 【发布时间】:2012-06-07 10:27:15 【问题描述】:我有两个模型:
Card with has_many relation to Works
我的意思是我的数据库中有 7 个静态作品,我可以在创建卡片时选择其中的一些。
我这样定义了一个 has_many 关系:
我的问题很奇怪......它似乎可以工作,但是当我浏览我的 sqlite 文件时,我没有看到 Card 和 Work 之间的任何表关系。
我期待一张带有 card_id 和 work_id 的表格。
核心数据存储有多少关系?
【问题讨论】:
【参考方案1】:首先,我要提醒您不要打开 Core Data 吐出的 sqlite 文件并试图从中推断出一些东西。它意味着一种不透明的格式:您只应该通过 Core Data API 与 Core Data 持久存储交互。
但是,要回答您的问题:通常在数据库设计中,您不会将您描述的链接表用于一对多关系,而仅用于多对多关系。对于一对多,您将在“一”端的表中有一个外键字段,并且该字段的内容是另一个表的主键。例如(抱歉我在 Google 上找到的随机示例):
tblOrder
与tblOrderDetails
是一对多的关系。这是通过在多对多关系中的Order#
字段来实现的,该字段是引用tblOrder
表的主键的外键。如您所见,不需要链接表。
多对多关系需要链接表,但一对多不需要。
最后一点:我在您的屏幕截图中注意到,您没有为 works
或 customer
关系设置反向关系。 Core Data 要求所有关系都具有逆向关系,否则您的数据可能会损坏。 (这有点简化了,因为还有其他方法可以解决它,但一般来说做逆是最简单的。)
【讨论】:
感谢您的回答。我很抱歉,但我认为我实际上是在做多对多的关系......我该如何实现链接表?我认为核心数据会自己生成? 哦,好的。好吧,我再说一遍,如果它在 Core Data 领域工作,不要弄乱底层数据库:它只是一个如何处理连接的实现细节。但无论哪种方式,您的屏幕截图中似乎都没有多对多关系,因为多对多关系肯定需要逆向关系。添加逆关系(确保它也是对多的)并再次查看? 是的,我添加了一个逆,它工作正常,我的链接表是自动创建的。以上是关于使用核心数据在 ios 中建立一对多关系的主要内容,如果未能解决你的问题,请参考以下文章