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

标签 objective-c ios xcode core-data ios5

我有两个模型:

Card with has_many relation to Works

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

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

Has many relationship

我的问题很奇怪...它似乎有效,但是当我浏览我的 sqlite 文件时,我没有看到 Card 和 Work 之间的任何表关系。

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

核心数据存储有多少关系?

最佳答案

首先,我要提醒您不要打开 Core Data 吐出的 sqlite 文件并试图从中推断出一些东西。它意味着一种不透明的格式:您只应该通过 Core Data API 与 Core Data 持久存储进行交互。

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

one-to-many

tblOrdertblOrderDetails 是一对多的关系。这是通过在关系的多对多方中有一个 Order# 字段来实现的,该字段是引用 tblOrder 表的主键的外键。如您所见,不需要链接表。

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

最后一点:我在您的屏幕截图中注意到您没有为您的workscustomer 关系设置反向关系。 Core Data 要求所有关系都具有逆向关系,否则您的数据可能会损坏。 (这在某种程度上是一种简化,因为还有其他方法可以解决它,但通常进行逆运算是最简单的。)

关于objective-c - 使用核心数据在 ios 中建立一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929989/

相关文章:

ios - 当我验证我的应用程序时,CFBundleDocumentTypes 键必须是字典数组

ios - 如何将 MBProgressHUD 的位置固定在 UITableView 的中心

objective-c - 如何以编程方式获取 mac os x 上已安装应用程序的列表

ios - ABAddressbook 记录删除通知

ios - SKTransition crossFadeWithDuration 不再有效

ios - 为什么只是在 XCode 5 中查看我的 Storyboard 会破坏我的应用程序?

ios - 导航 Controller 和容器 View 之间的通信

传递 Python 对象时,Objective-C 中的 Python-C Api 包装器因调用 __getattr__ 而崩溃

ios - 停止 NSURLRequest 写入缓存

xcode - 更新框架按钮在 Xcode 8.1 中消失