将枚举作为字节或文本保存到数据库

时间:2009-09-07 21:19:50

标签: c# .net database design-patterns

我无法对此做出明确的决定。

我可以通过在我的表上使用数值来获取DBA数据库中列的描述的值信息。

但是我也不想在未来将数据库中的这些数值设置为维护过于令人头痛的问题。

我不会特别喜欢在数据库上为这些枚举列添加字符串,因为它会在数据库上创建大量重复的字符串重复。这可能不是一个主要的性能问题,但是我觉得在桌面上有如此多的字符串来表示值是正确的。

您能否从长远的经验中分享您的想法。谢谢

1 个答案:

答案 0 :(得分:7)

处理您的情况的标准方法是通过查找表。通常,它们具有简单的结构(通常只有两列):

CREATE TABLE LookupTable
(
    code    SMALLINT NOT NULL PRIMARY KEY,
    name    VARCHAR(32) NOT NULL
);

您可能也可能不会使名称列唯一。然后,对于包含相关类型值的表,使用:

CREATE TABLE ReferencingTable
(
    ...
    lookup   SMALLINT NOT NULL REFERENCES LookupTable,
    ...
);

在这里,我的名字并不是很聪明;您可以使用'CustomerStatus'代替'LookupTable',然后在ReferencingTable中使用列名CustStatus。您可以为“代码”列选择各种类型 - 单个字节的小整数,小型CHAR字段或INTEGER,具体取决于您可能需要的值。有时,查找表变得更加复杂,并且获取了描述实体的额外属性,尽管这通常意味着它正在为您的数据库建立一个重要的实体并且它不再只是“查找表”。

你最终可以得到很多这些查找表,但是抵制陷入推广到“一个真实的查找表”(OTLT)习语的陷阱。正如其他SO问题和网络上的其他问题所述,这会导致数据完整性问题。