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