【问题标题】:Can a Core Data Relationship Have Attributes核心数据关系可以有属性吗
【发布时间】:2017-01-06 06:07:35
【问题描述】:
我正在将 MySQL 数据库移植到 Mac OS 应用程序的 Core Data。我的数据库中有两个多对多表。除了包含外键之外,还有一些数据列。是否可以在 Core Data 中为多对多关系添加属性?在我看来不像。我的后备方案是复制 Core Data 中的链接表。这样做有什么问题吗?
一个例子:
一张唱片有一个或多个艺术家在上面表演。
艺术家在零个或多个唱片上表演。
链接表行包含记录的外键、艺术家的外键、演奏者使用的乐器,以及添加附加信息的注释列,例如艺术家在哪个轨道上演奏。
【问题讨论】:
标签:
mysql
macos
core-data
swift3
【解决方案1】:
你是对的:关系本身不能有属性。在将链接表建模为中间实体方面,您走在了正确的轨道上。在“基于语义建模关系”的CoreData Programming Guide 部分中提到了这种方法。在他们的案例中,他们使用具有ranking 属性的中间FriendsInfo 实体对从Person 到Person 的(自反)多对多关系进行建模。
在您的示例中,您可能有一个Record 实体、一个Artist 实体和一个中间Appearance 实体。 Appearance 实体将具有 Instruments 和 Notes 的属性,以及与 Record 和 Artist 的(一对一)关系(每个都有一对多的逆)。
轻微的缺点是您必须创建Appearance 对象才能链接Record 对象和Artist 对象,而不仅仅是将它们添加到相关关系中。您还必须注意 Record/Artist 组合的唯一性,如果这对您很重要:默认情况下,相同的 Record 和 Artist 可能有多个 Appearances。