Sql-Server
在 SQL Server 中的表上有多個可為空的 FK 是否被視為一種不好的做法
在我的 SQL Server 數據庫結構中,我有 3 種類型的產品,它們需要有關訂單的不同資訊。因此,我創建了一個
Customers
表和三個不同的訂單表:OrdersForProductAs
、OrdersForProductBs
、OrdersForProductCs
。所有訂單表在表上都有一對多的關係Customers
。我還有另一張桌子,裡面
Payments
會保存付款詳情。但我對如何建構它有疑問。由於我有多種產品類型,並且客戶可能同時訂購多種產品,因此我需要將這三個訂單表關聯到
Payments
表。另一個問題是客戶可能只訂購一種產品。因此,表上的 FK 列
Payments
需要是nullable
.我的問題是
nullable
,從長遠來看,這些 FK 列是否會讓我頭疼?一般來說,在表上具有可為空的 FK 列是否會被視為一種不好的做法?
我會質疑你為什麼有
OrdersForProductX
桌子你問的FK問題可能可以設計出來……
如果這些表具有相同的結構,那麼您只需要
ProductType
某個表上的列OrderProduct
。然後Payment
用一個 FK 連結到那個如果表有不同的結構,我假設它們有一些共同的屬性。因此,您可以有一個公用
OrderProduct
表,然後是每個產品類型的特定子表(見下文)同樣,Payment
只需使用一個 FK 連結到公用表這是“超級鍵/子類型模式”
- UQ1 是在子類型表上使用外鍵的“超級鍵”
- 每個子類型表都有一個組合的 PK 和 FK
(OrderID, ProductType)
- 每個子類型表都有一個 CHECK 約束來限制該表中的類型
訂購產品
- OrderID, PK, UQ1
- 產品類型,UQ1
- 普通事物1
- …
訂購產品A
- 訂單ID,PK,FK
- 產品類型,PK,FK,檢查產品類型 = A
- 產品AThing1
- …
訂購產品B
- 訂單ID,PK,FK
- 產品類型,PK,FK,檢查產品類型 = B
- 產品BThing1
- …