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

4

在遵循这个问题的精神下,什么是在Delphi中将枚举存储到数据库中的最理想方式?我有几个引导一些业务逻辑的查找表,因此a)它们与我的代码紧密耦合,并且b)它们可能会在新版本中发生变化。

现在,我通过保存其数字值并明确设置枚举值来完成它。

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

你知道更好的方法吗?

3
将数据存储为整数是您能够做到的最好选择。 - David Heffernan
如果你存储字符串,那么同样会使将来更改名称变得困难。这个问题是无法回避的。 - David Heffernan
1
@Marjan Venema - 我看不出存储名称的任何优势。在上面的示例中,数字是指定的,因此您可以轻松插入新值,甚至可以更改顺序和删除值。另一方面,存储字符串可能会在大小写敏感比较方面引起理论上的问题。 - martinstoeckli
这真的取决于所使用的DBMS。顺便说一下,你的序数4是无意义的。 - OnTheFly
1
你可以创建另一个表,并将枚举类型存储为外键。 - Mihaela
显示剩余6条评论
1个回答

3
考虑到关系模型,您应该将枚举值存储在表中,并创建另一张表,用于存储枚举值和名称。后者可以纯粹通过运行时类型信息(RTTI)创建。
以您的示例为例:您有一个名为"Card"的表,其中"Suit"是一个字节字段,其值为0..4。还有一张名为"Suits"的表,有5条记录,每条记录对应一个枚举值。
现在您的数据已经正确归一化,元数据已就位,因此您知道"Suits=2"表示什么(例如与"Suits"表连接)。

这是我目前正在做的事情。它仍然有点“异味”,但如果它能工作,那就行了。 - Leonardo Herrera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接