2014-03-19 63 views
0

我有两个实体订单och托盘。 订单有主键ID。 托盘也有一个主键palletID。 我们有0..1在订购sider和*托盘一侧。 我应该如何将其转换为数据库中的表格?转换ER到关系

+0

你有两个表订单和托盘。每张桌子都有唯一的ID,托盘和订单之间有多对一的关系? – deanosaur

+0

*到0..1的关系 – user2975699

回答

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) 
+0

* * 0..1的情况 – user2975699

+0

我不确定这是什么意思。如果您选择第一个模型,那么订单可能有0个或更多个托盘,托盘可能与0个或1个订单相关联。如果您想查找订单的所有货盘'select o.orderId,则订单中的p.palletId将o.orderId = p.orderId'上的货盘连接起来。如果您想包含没有托盘的订单,请将其作为“左连接”。如果您想查找与任何订单都没有关联的货盘,请执行'从orderId为空的货盘中选择*。 – deanosaur

+0

上面的第二个模型,使用'orderspallets'连接表将捕获订单和货盘之间的任何关系。订单可能有零个或多个托盘,托盘可能与零个或多个订单相关联。 – deanosaur