与可选值的多对多关系?

时间:2010-02-12 15:35:03

标签: iphone database-design core-data

我在两个表之间有多对多的关系:Order和Item。我需要保存关于这种关系的额外信息,数量。

所以,我必须在我的模型.xcdatamodel中创建一个额外的表?

在以下架构中,orderItemsOrderItem表的关系是多对多的。 order& item是反比关系。

Order (start, end, orderItems)
Item (name, orderItems)
OrderItem (quantity, order, item)

编辑:

根据兰迪的说法,这是你的建议吗?

Order (start, end, orderItems)
Item (name, quantity, orders)

orderItems指向Item作为多对多关系,反对关系为ordersorders指向Order作为多对多关系

3 个答案:

答案 0 :(得分:3)

无需创建其他表格。拥有一个M2M关联表是可以接受的,该表包含除两个表的FK引用之外的列。有时,M2M关联表中的附加列非常有意义。

答案 1 :(得分:3)

我很确定你提出的问题是:

  

所以,我必须在我的模型.xcdatamodel中创建一个额外的实体

答案是肯定的。您需要第三个“OrderItem”实体。

正如您所描述的那样:

  1. 订单商品只有一个订单和一个商品。
  2. 订单包含许多订单商品,许多订单商品都会使用这些商品。
  3. 订单< - >> 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

http://www.freeimagehosting.net/uploads/f6ca00bc2f.png

中的模型