使用核心数据在ios中建立一对多的关系

时间:2012-06-07 10:27:15

标签: objective-c ios xcode core-data ios5

我有两种模式:

Card with has_many relation to Works

我的意思是我的数据库中有7个静态作品,我可以在创建卡片时选择其中一些。

我定义了一个像这样的has_many关系:

Has many relationship

我的问题很奇怪...它似乎有效,但是当我探索我的sqlite文件时,我看不到卡与工作之间的任何表关系。

我期待一张包含card_id和work_id的表。

核心数据存储如何有多种关系?

1 个答案:

答案 0 :(得分:2)

首先,我要提醒你打开sqlite文件Core Data spits out并尝试从中推断出来。它意味着是一种不透明的格式:您只能通过Core Data API与Core Data持久存储进行交互。

但是,回答你的问题:一般来说,在数据库设计中,你不会像你描述的一对多关系一样使用链接表,只能用于多对多关系。对于一对多,您在“一”端的表中有一个外键字段,并且该字段的内容是另一个表的主键。例如(抱歉我在Google上找到的随机示例):

one-to-many

tblOrdertblOrderDetails处于一对多关系。这是通过在关系的to-many侧具有Order#字段来实现的,该字段是引用tblOrder表的主键的外键。如您所见,不需要链接表。

多对多关系需要一个链接表,但一对多不会。

最后一点:我在屏幕截图中注意到,您没有为workscustomer关系设置反向关系。核心数据要求所有关系都具有反转,否则您的数据可能会损坏。 (这有点简化,因为还有其他方法可以解决它,但总的来说反转是最简单的。)