2014-11-06 162 views
1

在我的應用程序數據庫中,某些列只能有2-4個可能的值。如何在數據庫中存儲低基數主數據

例如

  1. 「性別」只能有2個值( '男', '女')

  2. 「婚姻狀況」可以有3個值('單','已婚','離婚')

  3. 「PROC_STATUS」可以有3個值('Pending','In Progress','Finished')

  4. 「PROC_SATISFACTION」可以有值( '令人失望', '不滿意', '滿意', '非常滿意')

有這樣幾個主數據值。

什麼是存儲在數據庫中這個主數據的最佳方式?似乎爲他們每個人的

製作表格不是一個很好的選擇,因爲該數據是靜態的(將很難改變),非常少。

另一種選擇是使用檢查約束。

另一種選擇是在代碼中進行枚舉。

我正在尋找一種方法來存儲在數據庫這個主數據。 IA沉思SQL Server 2012的

任何幫助將得到高度讚賞。

回答

1

從系統分析員來了...

的主要考慮是,如果你打算做任何國際化。直到你認爲許多語言不是基於拉丁語的,性別看起來很簡單,如'M''F'

另一個考慮是,如果數據庫是真正打算作爲完全獨立於應用程序的關係數據庫(第三方報告,數據導入導出等)來操作,或者如果數據庫僅僅是應用程序存儲。

IMX,如果您不需要國際化,那麼對於性別我會使用char(1)字段爲'M''F'。除此之外不需要任何東西,因爲對於這樣的類別它是相當明顯的(除非你的系統需要擔心複雜的性別等)。同樣,如果您可以通過'Y''N'獲取真/假字段,並且不想使用bit那就沒問題。在整個應用程序中保持一致。不要混合搭配。

對於其他任何事情,我會創建一個驗證表,其中包含代碼,代碼的說明/擴展以及(如果可能的話)Active列,以便用戶可以指定某些代碼不再使用(確保你的代碼尊重這一點!)。在一個複雜的系統中,應用程序的系統設置區域可以允許具有SysAdmin訪問權限的用戶創建新代碼,將其標記爲活動或非活動狀態,或者在未使用時從驗證表中刪除代碼。他們可能想要一個PROC_STATUS的Cancelled,或者PROC_SATISFACTION的「No Response」。外鍵約束很好,但許多使用此方法的應用程序在我的經驗中不使用FK。

如果您的應用程序需要i18​​n,並且數據需要在區域之間可移植(即德國的數據庫需要能夠與中國的應用程序服務器完全兼容,只需更新幾次語言更改),那麼您可以「實際上將代碼存儲在基表中。您可能需要使用整數,該整數映射回驗證表,其中您具有查找id整數,用戶將用於其區域的代碼,該代碼的長名稱,然後是活動/非活動選項。正確的i18n將包括根據安裝預先填寫這些表格的正確值。

相關問題