2015-09-06 25 views
1

弱實體是否需要部分密鑰?或者你可以使用它的父鍵作爲它的主鍵。弱實體是否需要部分密鑰?

即Order和OrderItem。訂單有PK OrderPK,而OrderItem沒有部分金鑰。

這被認爲是不好的做法?

+1

想一想,如果'OrderItem'與'Order'具有相同的主鍵,那麼'Order'有多少個'OrderItem'? –

回答

1

OrderItem表應該有一個OrderID字段,使FK引用回到Orders表。這確保每個項目是有效的訂單。

然後,通常會有另一個字段與每個項目區分開來,這些項目將與OrderID字段一起用於形成項目的主鍵。

這可能是一個固有值或一個訂單內每個項目唯一的值。 SKU或PartNum可能就是這樣一個值,假設同一項目的多次出現將合併成一個入口。要找到這個值,只要問問自己,你需要在同一個訂單中唯一標識一個項目的最小數據量。但是,這可能是不可能的。這種方案的一個缺點是,你可能使用關鍵字段的動態數據。某個特定項目的SKU將來可能會發生一些變化。

或者對於訂單中的每個項目可能有一個連續值(1,2,3 ...)。這種方案的缺點是序列值不能被系統生成。每個順序對於每個訂單都是唯一的,並且必須由觸發器或應用程序代碼生成。

或者可能有系統生成的順序值對於所有訂單的所有項都是唯一的,並且此字段可能是唯一的主鍵。按順序的順序值仍然可以通過查詢中的row_number函數生成,但這意味着特定項目在不同查詢中可能具有不同的值。這可能也可能不是問題。

此時,只有您足夠了解您的系統才能選擇最佳選項。但是用戶通常需要能夠選擇一個特定訂單的特定項目,因此通常需要爲每個項目定義一些關鍵定義。

相關問題