2014-03-19 103 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