遵循this question的精神,應該在Delphi中將枚舉存儲在數據庫中的理想方式是什麼?我有幾個查找表來指導一些業務邏輯,所以a)它們與我的代碼緊密耦合,b)它們可能會在新版本中發生變化。在Delphi中將枚舉存儲在數據庫中的最佳方式是什麼?
現在我通過保存它的數值,並明確設置枚舉值來做到這一點。
type TSuit = (Unknown = 4, Heart = 1, Club = 3, Diamond = 2, Spade = 0);
你知道更好的方法嗎?
遵循this question的精神,應該在Delphi中將枚舉存儲在數據庫中的理想方式是什麼?我有幾個查找表來指導一些業務邏輯,所以a)它們與我的代碼緊密耦合,b)它們可能會在新版本中發生變化。在Delphi中將枚舉存儲在數據庫中的最佳方式是什麼?
現在我通過保存它的數值,並明確設置枚舉值來做到這一點。
type TSuit = (Unknown = 4, Heart = 1, Club = 3, Diamond = 2, Spade = 0);
你知道更好的方法嗎?
鑑於關係模型,您可能應該將枚舉的值存儲到手頭的表中,並創建另一個存儲枚舉值+名稱的表。後者可以純粹從RTTI創建。
所以給出你的例子:你有類似Card表的東西,其中Suit是一個值爲0..4的字節字段。你有一個Suits表有5個記錄,每個枚舉值一個。
現在你的數據被正確地規範化並且元數據存在,你知道Suit = 2是什麼意思(例如,與Suits表一起加入)。
這是我目前正在做的。它仍然「聞起來」,但如果它起作用,它就會起作用。 – 2012-02-13 19:07:20
以整數形式存儲是最好的選擇。 – 2012-02-04 17:16:29
@DavidHeffernan以字符串形式存儲並使用GetEnumName/GetEnumValue是另一種方式。佔用更多空間,但避免了在枚舉中插入新值時整數的問題變得不同。 (在這個例子中不太可能,但總的來說,它發生並且應該是可能的,至少它不應該僅僅出於持久性的原因而被避免)。 – 2012-02-04 17:22:15
@Marjan如果你存儲字符串,那麼你同樣很難在將來改變名字。有沒有越過這個問題。 – 2012-02-04 17:23:29