Database 在Delphi中,在数据库中存储枚举的最佳方法是什么?

Database 在Delphi中,在数据库中存储枚举的最佳方法是什么?,database,delphi,enums,Database,Delphi,Enums,遵循的精神,在Delphi中,在数据库中存储枚举的理想方法应该是什么?我有几个查找表来指导一些业务逻辑,因此a)它们与我的代码紧密耦合,b)它们可能会在较新的版本中发生更改 现在,我通过保存其数值并显式设置枚举值来实现 type TSuit = (Unknown = 4, Heart = 1, Club = 3, Diamond = 2, Spade = 0); 您知道更好的方法吗?考虑到关系模型,您可能应该将枚举值存储到手头的表中,并创建另一个存储枚举值+名称的表。后者可以完全从RTTI创建

遵循的精神,在Delphi中,在数据库中存储枚举的理想方法应该是什么?我有几个查找表来指导一些业务逻辑,因此a)它们与我的代码紧密耦合,b)它们可能会在较新的版本中发生更改

现在,我通过保存其数值并显式设置枚举值来实现

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

您知道更好的方法吗?

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

举个例子:有一个类似于卡片表的东西,其中Suit是一个值为0..4的字节字段。您有一个包含5条记录的SUTS表,每个enum值对应一条记录


现在您的数据已正确规范化,元数据已存在,您知道Suit=2的含义(例如与Suits表连接)。

存储为整数是最好的选择。@DavidHeffernan存储为字符串并使用GetEnumName/GetEnumValue是另一种方法。占用更多空间,但避免了在枚举中插入新值时整数获得不同含义的问题。(在这个特定的例子中不太可能,但通常情况下,它会发生并且应该是可能的。至少不应该仅仅因为持久性的原因而避免这种情况)。@Marjan如果你存储字符串,那么你将来同样很难更改名称。这个问题是绕不开的。@Marjan Venema-我看不出储存这个名字有什么好处。在上面的示例中,指定了数字,因此您可以毫无问题地插入新值,甚至可以更改顺序和删除值。在另一端存储字符串可能会导致区分大小写的比较出现问题。您可能会创建另一个表并将枚举存储为外键。这就是我目前正在做的。它仍然“有味道”,但如果它起作用,它就会起作用。