C# 将枚举作为字节或文本持久化到数据库

C# 将枚举作为字节或文本持久化到数据库,c#,.net,database,design-patterns,C#,.net,Database,Design Patterns,我无法就这一点做出明确的决定 我的表中有数字值,数据库中DBA列的描述中有值信息,这样就可以了 但我也不希望将来出现这样的情况,即数据库中的这些数值会给维护带来太多麻烦 我对数据库中这些枚举列的字符串也不是特别感兴趣,因为这会在数据库中创建大量重复的字符串。这可能不是一个主要的性能问题,但我觉得在一个表上有这么多字符串来表示一个值是不对的 你能分享一下你的长期经验吗。谢谢处理您的情况的标准方法是通过查阅表格。通常,它们的结构很简单(通常只有两列): 您可能会也可能不会使名称列唯一。然后,对于包含

我无法就这一点做出明确的决定

我的表中有数字值,数据库中DBA列的描述中有值信息,这样就可以了

但我也不希望将来出现这样的情况,即数据库中的这些数值会给维护带来太多麻烦

我对数据库中这些枚举列的字符串也不是特别感兴趣,因为这会在数据库中创建大量重复的字符串。这可能不是一个主要的性能问题,但我觉得在一个表上有这么多字符串来表示一个值是不对的


你能分享一下你的长期经验吗。谢谢

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

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

CREATE TABLE ReferencingTable
(
    ...
    lookup   SMALLINT NOT NULL REFERENCES LookupTable,
    ...
);
在这里,我对名字不是很聪明;您可以使用“CustomerStatus”代替“LookupTable”,然后在ReferenceTable中使用列名称CustStatus。您可以为“code”列选择多种类型—单字节小整数、小字符字段或整数,具体取决于您可能需要的值的数量。有时,查找表会变得更复杂,并且也会获取描述实体的额外属性,尽管这通常意味着它正在建模对数据库具有某种重要性的实体,并且它不再是“一个查找表”


您最终可能会得到很多这样的查找表,但请抵制落入“一个真正的查找表”(OTLT)习惯用法的陷阱的诱惑。正如其他SO问题和web上其他地方所述,这会导致数据完整性问题。

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

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

CREATE TABLE ReferencingTable
(
    ...
    lookup   SMALLINT NOT NULL REFERENCES LookupTable,
    ...
);
在这里,我对名字不是很聪明;您可以使用“CustomerStatus”代替“LookupTable”,然后在ReferenceTable中使用列名称CustStatus。您可以为“code”列选择多种类型—单字节小整数、小字符字段或整数,具体取决于您可能需要的值的数量。有时,查找表会变得更复杂,并且也会获取描述实体的额外属性,尽管这通常意味着它正在建模对数据库具有某种重要性的实体,并且它不再是“一个查找表”


您最终可能会得到很多这样的查找表,但请抵制落入“一个真正的查找表”(OTLT)习惯用法的陷阱的诱惑。正如其他SO问题和web上其他地方所述,这会导致数据完整性问题。

LookupTable可能是一个带有“EnumName”字段的“LookupTable”。LookupTable可能是一个带有“EnumName”字段的“LookupTable”。看起来这个问题几小时前刚刚被问过(并得到了回答):Marc似乎这个问题刚刚被问过(并回答)几个小时前:马克