2009-09-24 124 views
8

對我來說,經典的看法是將枚舉值(OrderStatus,UserTypes等)作爲查找表存儲在數據庫中。這使我可以在數據庫中執行數據完整性,防止錯誤值或空值等。枚舉數據庫中的DB或NO枚舉

但是越來越多,這感覺像是對我不必要的重複。我不僅需要爲這些值創建表(或者有一個笨拙的中央查找表),但是如果我想添加一個值,我必須記住將它添加到2(或更多,計算生產,測試,實時數據庫),而且事情可能很容易失去同步。

我仍然很難放開查找表。

我知道可能存在一些情況,其中一個比另一個有優勢,但是你的一般想法是什麼?

回答

4

我已經做了兩個,但我現在更喜歡在代碼中的類中定義它們。

新文件不需要花費任何費用,而您在數據庫中查找的好處應視爲業務規則。

此外,我有一種厭惡的方式來保存數據庫中的數據,這些數據實際上並沒有改變。看來一個枚舉符合這個描述。我有一個國家查找表是沒有意義的,但是一個國家枚舉類對我來說是有意義的。

+0

你如何處理確保沒有行的枚舉值無效?只使用訪問數據庫的代碼? – 2009-09-24 19:27:57

1

我把它們放在數據庫中,但我真的不能防守爲什麼我這樣做。它只是「看起來不錯」。我想我通過說檢查數據庫總是有一個「正確」的枚舉類型。

2

如果必須維護,我會將它們留在數據庫的查找表中。即使我認爲他們不需要維護,我仍然會去查找表,這樣如果我錯了,這不是什麼大問題。

編輯:

我要澄清的是,如果枚舉不是DB模式的一部分,那麼我將它留在代碼。

+0

什麼不會被認爲是數據庫模型的一部分? – 2009-09-24 19:45:51

+0

任何不作爲記錄條目的一部分存儲在數據庫中的東西。 – klabranche 2009-09-24 19:48:56

1

架構的依賴應該存儲在數據庫本身,以確保您的體系結構的任何變化可以透明地輕鬆地執行到應用程序..

1

我喜歡枚舉,因爲它強制早期綁定代碼中的值,使異常不是由缺失值造成的

如果您可以使用能夠將整數列的關聯引入枚舉類型的代碼生成也是有幫助的,這樣在業務邏輯中您只需處理易記憶的枚舉值。

1

認爲它是一種文檔形式。

如果您已經在使用dB的代碼中正確記錄了枚舉常量,那麼您是否真的需要一套重複的文檔(要使用和維護)?

+2

在思考它的時候,我想它歸結爲將其視爲數據庫驅動的應用程序或使用數據庫來存儲它的狀態的應用程序。我的意思是將數據庫視爲一個獨立的實體,可能被其他應用程序或服務使用,在這種情況下,數據完整性至關重要。與使用db作爲應用程序的簡單數據存儲,依靠應用程序來執行數據完整性規則。在這種情況下,關係可能甚至不需要。 – 2009-09-26 15:04:02