假設我希望表Regions
中的條目具有類型,例如,一個城市,一個國家等等。假設我將使用O/RM(在我的情況下爲NHibernate),什麼是存儲此類型的可接受方式?我看到兩個選項:數據庫中的枚舉和O/RM
- 在C#bussines圖層中使用類型枚舉enum,並在表中將類型存儲爲
tinyint
。 - 查找表
RegionTypes
帶有類型標識符(字符串或整數),並在Regions
表中引用它們。
從數據庫的角度來看,第二種方法似乎更合理,因爲我有外鍵約束,再加上我可以有關於區域類型的其他數據,例如,一個城市是一個國家的孩子類型(因爲我使用的是SQL Server 2008空間特徵,實際上我需要這些信息進行空間操作)。然而,從C#的角度來看,我基本上必須有一個實體RegionType
並從數據庫中加載它每次我想分配給一個區域(因爲我明白NHibernate不會讓我做的類型一個枚舉,如果我將它存儲在查找表中)。這對於這樣一個簡單的任務來說有點乏味,因爲他們知道區域類型基本上是固定的,不太可能改變。
其他類型,如DayOfWeek
哪些不可能改變或具有附加屬性,如果他們有他們的查找表和實體呢?
這將是一個很好且有效的查找/參考系統,但在數據庫關係完整性方面完全無效。 – 2009-08-14 18:20:50
@Philip:怎麼樣? – 2009-08-14 18:39:14
除非完整的主鍵(Type + Id)出現在* both * parent和child表中,否則您將無法將外鍵約束設置到查找表中。 RDBMS在執行關係完整性方面非常優秀,我不想失去這種內置功能。 – 2009-08-14 19:09:28