2012-02-04 45 views
3

遵循this question的精神,应该在Delphi中将枚举存储在数据库中的理想方式是什么?我有几个查找表来指导一些业务逻辑,所以a)它们与我的代码紧密耦合,b)它们可能会在新版本中发生变化。在Delphi中将枚举存储在数据库中的最佳方式是什么?

现在我通过保存它的数值,并明确设置枚举值来做到这一点。

type TSuit = (Unknown = 4, Heart = 1, Club = 3, Diamond = 2, Spade = 0); 

你知道更好的方法吗?

+3

以整数形式存储是最好的选择。 – 2012-02-04 17:16:29

+0

@DavidHeffernan以字符串形式存储并使用GetEnumName/GetEnumValue是另一种方式。占用更多空间,但避免了在枚举中插入新值时整数的问题变得不同。 (在这个例子中不太可能,但总的来说,它发生并且应该是可能的,至少它不应该仅仅出于持久性的原因而被避免)。 – 2012-02-04 17:22:15

+0

@Marjan如果你存储字符串,那么你同样很难在将来改变名字。有没有越过这个问题。 – 2012-02-04 17:23:29

回答

3

鉴于关系模型,您可能应该将枚举的值存储到手头的表中,并创建另一个存储枚举值+名称的表。后者可以纯粹从RTTI创建。

所以给出你的例子:你有类似Card表的东西,其中Suit是一个值为0..4的字节字段。你有一个Suits表有5个记录,每个枚举值一个。

现在你的数据被正确地规范化并且元数据存在,你知道Suit = 2是什么意思(例如,与Suits表一起加入)。

+0

这是我目前正在做的。它仍然“闻起来”,但如果它起作用,它就会起作用。 – 2012-02-13 19:07:20

相关问题