将ER转换为关系

时间:2014-03-19 15:59:18

标签: mysql

我有两个实体订单och托盘。 订单具有主键ID。 托盘还有一个主键托盘ID。 我们在订单侧有0..1,在托盘侧有*。 我应该如何将其转换为数据库中的表格?

1 个答案:

答案 0 :(得分:1)

模拟订单可能包含零个或多个托盘的方案,托盘可能与0或1个订单相关联:

非规范化:

orders
------
orderId   (PK)
pallets (e.g. palletA, palletB, palletC, ...)   <--- horrible compound field

pallet
------
palletId  (PK)

通过将FK添加到多对0或1关系的many侧,将非规范化表放在第二范式中,并从1侧删除复合字段。

  orders
 --------
  orderId   

  pallets
  --------
  palletId  
  orderId (FK)

在此模型中,每个托盘都引用一个订单(或者可能是零),许多托盘可能引用相同的订单。

另一种选择是使用连接表。这样可以实现订单和托盘之间的多对多关系,并使关系建模与订单和托盘数据分开。

 orders
 --------
  orderId   (PK)

  pallets
  --------
  palletId  (PK)

  orderspallets
  -------------
    orderId  (FK)
    palletId (FK)