2012-04-19 42 views
4

這更像是一個數據庫設計問題,我很好奇專業數據庫管理員在只有兩組值值 - 下面舉兩個設計場景的例子,你會選擇哪個場景。爲什麼?數據庫設計 - 創建一個只有兩個值的表格,或者將其設置爲具有這兩個值中的任意一個的列

方案一

table INVOICES 
------------------------------- 
id | royalty_fee | royalty_type 
------------------------------- 
1 | 15   | percentage 
2 | 10.00  | fixed 
1 | 25   | percentage 
1 | 25.00  | fixed 

或....

兩個方案

table INVOICES 
---------------------------------- 
id | royalty_fee | royalty_type_id 
---------------------------------- 
1 | 15   | 1 
2 | 10.00  | 2 
1 | 25   | 1 
1 | 25.00  | 2 


table ROYALTY_TYPES 
------------------------------- 
id | label 
------------------------------- 
1 | percentage 
2 | fixed 

回答

7

方法2時更好。您的開發人員可以使用第二張表ROYALTY_TYPES進行查找,如果您想添加新類型或編輯/更新ROYALTY_TYPES的標籤,則可以輕鬆完成。 如果您編輯/修改標籤在ROYALTY_TYPES這將需要改變只在一個地方,該表發票將不受影響
編輯:
我通常尋找三件事情對於數據庫設計:
它多麼容易添加:在第一種方法中,如果您沒有發票記錄,則無法添加新版稅類型。我的意思是如果你想添加一個新類型,可以說HalfFixed用於將來的發票。你將無法做到這一點,沒有得到一個類型的發票HalfFixed
更新容易可以說如果你想更新版稅類型固定爲'修正'。如果你遵循第一種方法,那麼你將被要求在多行中進行更新。
刪除的難易程度現在,如果您想從版稅類型中刪除某個類型,那麼根據您的第一種方法,您必須在表格上運行更新聲明並將特定版稅類型設置爲NULL。

+1

同意。此外,您還可以獲得外鍵約束的好處,以確保插入的值符合可用的值集合。 – Shlomo 2012-04-19 17:09:57

+0

@Sholmo,絕對是對的。 – Habib 2012-04-19 17:11:34

+0

感謝您花時間解釋@ Habib.OSU。 – chadwtaylor 2012-04-19 17:46:13

1

在事務性數據庫上,2更好。 1可用於數據倉庫系統。

2

我會用後者,毫無疑問。

  1. 你可以絕對肯定永遠不會是另一種版稅類型嗎?你不能。
  2. 您可以通過外鍵關係來驗證royalty_type_id列...與royalty_type不同的是...您必須對硬編碼的文本值使用檢查約束。
  3. 使用royalty_types表,您可以根據需要向版稅類型實體本身添加新功能。
+0

很有意義,謝謝@JeffSahol。 – chadwtaylor 2012-04-19 17:46:51

相關問題