我有两个模型:
Card with has_many relation to Works
我的意思是我的数据库中有 7 个静态作品,我可以在创建卡片时选择其中的一些。
我定义了这样的 has_many 关系:
我的问题很奇怪......它似乎可以工作,但是当我浏览我的 sqlite 文件时,我看不到 Card 和 Work 之间的任何表关系。
我期待一张带有 card_id 和 work_id 的表。
核心数据存储有多少关系?
我有两个模型:
Card with has_many relation to Works
我的意思是我的数据库中有 7 个静态作品,我可以在创建卡片时选择其中的一些。
我定义了这样的 has_many 关系:
我的问题很奇怪......它似乎可以工作,但是当我浏览我的 sqlite 文件时,我看不到 Card 和 Work 之间的任何表关系。
我期待一张带有 card_id 和 work_id 的表。
核心数据存储有多少关系?
首先,我要提醒您不要打开 Core Data 吐出的 sqlite 文件并试图从中推断出一些东西。它意味着一种不透明的格式:您只应该通过 Core Data API 与 Core Data 持久存储交互。
但是,要回答您的问题:通常在数据库设计中,您不会像描述的那样将链接表用于一对多关系,而仅用于多对多。对于一对多,您将在“一”端的表中有一个外键字段,并且该字段的内容是另一个表的主键。例如(对不起,我在 Google 上找到的随机示例):
tblOrder
与 是一对多的关系tblOrderDetails
。这是通过Order#
在关系的多对多方中有一个字段来实现的,该字段是引用tblOrder
表的主键的外键。如您所见,不需要链接表。
多对多关系需要链接表,但一对多不需要。
最后一点:我在您的屏幕截图中注意到,您没有为您的works
or关系设置反向customer
关系。Core Data 要求所有关系都具有逆向关系,否则您的数据可能会损坏。(这有点简化了,因为还有其他方法可以解决它,但一般来说做逆是最简单的。)