我在两个表之间有多对多的关系:Order和Item。我需要保存关于这种关系的额外信息,数量。
所以,我必须在我的模型.xcdatamodel中创建一个额外的表?
在以下架构中,orderItems
与OrderItem
表的关系是多对多的。 order
& item
是反比关系。
Order (start, end, orderItems)
Item (name, orderItems)
OrderItem (quantity, order, item)
编辑:
根据兰迪的说法,这是你的建议吗?
Order (start, end, orderItems)
Item (name, quantity, orders)
orderItems
指向Item
作为多对多关系,反对关系为orders
,orders
指向Order
作为多对多关系
答案 0 :(得分:3)
无需创建其他表格。拥有一个M2M关联表是可以接受的,该表包含除两个表的FK引用之外的列。有时,M2M关联表中的附加列非常有意义。
答案 1 :(得分:3)
我很确定你提出的问题是:
所以,我必须在我的模型.xcdatamodel中创建一个额外的实体?
答案是肯定的。您需要第三个“OrderItem”实体。
正如您所描述的那样:
订单< - >> OrderItem<< - >项目
数量属性位于OrderItem实体中。
这并不意味着您要创建额外的表。如果您使用SQLite进行存储,Core Data将使用额外的表来实现多对多关系。
通常使用Core Data,您将设计和使用满足您需求的数据模型。你不应该在SQL或表方面考虑它。实际上,它甚至不必使用SQL进行存储。
答案 2 :(得分:0)
我遇到了同样的问题。当我们在Core Data中创建多对多关系时,它会创建一个关系表,不是吗?有没有办法把信息(关系属性)放在那个表???
我已经考虑过这两种方式,但它们似乎都不是最好的。如果我错了,请纠正我......我正在尝试对我的应用进行建模。
1)它解决了问题,但不使用Core Data的多对多关系。
Order (start, end, orderItems)
Item (name, orderItems)
OrderItem (quantity, order, item)
我更喜欢这个,因为它不会重复行。
2)这样我们复制数据,不是吗?因为如果您在多个订单中具有相同的项目,则您有多个具有名称信息的行。如果项目有更多列,如描述,问题就会增加......描述将被复制。
Order (start, end, orderItems)
Item (name, quantity, orders)
3)我现在正在阅读手册“核心数据”,并认为另一种可能性是等于数据库中的解决方案2:
Order (start, end, orderedItens)
Item (name, description, ...)
OrderedItem (quantity, order)
OrderedItem的parent = Item
Item
^
|
Order <--->> OrderedItem
中的模型