它是最好的存储枚举值或数据库表中的字段的枚举名?枚举存储在数据库领域
例如,我应该将'TJLeft'作为字符串存储还是将其存储在数据库中?
Public Enum TextJustification
TJLeft
TJCenter
TJRight
End Enum
我目前倾向于名称为一些以后可以一起走,并明确分配不同的值。
编辑 -
一些枚举的是我的控制下,但也有一些来自第三方。
它是最好的存储枚举值或数据库表中的字段的枚举名?枚举存储在数据库领域
例如,我应该将'TJLeft'作为字符串存储还是将其存储在数据库中?
Public Enum TextJustification
TJLeft
TJCenter
TJRight
End Enum
我目前倾向于名称为一些以后可以一起走,并明确分配不同的值。
编辑 -
一些枚举的是我的控制下,但也有一些来自第三方。
存储一个ID(值)和一个varchar名称;这可以让你以任何方式查询。如果您的ID(值)稍后可能不同步,则搜索该名称是合理的。
最好使用整数表示...如果你必须稍后改变Enum(添加更多的值等),你可以明确地分配整数值给枚举值,这样你的代码中的Enum表示仍然匹配你有在数据库中。
这取决于性能与可读性的重要性。数据库可以比字符串更容易索引数值,这意味着您可以在不使用更多内存的情况下获得更好的性能。它也会减少通过电线的数据量。另一方面,当您查看数据库中的数值时,您必须引用代码文件进行翻译,这可能很烦人。
在大多数情况下,我会建议使用该值,但是您需要确保明确设置这些值,以便在未来添加值时不会移动引用。
由于经常这取决于很多事情:
你想通过枚举的自然顺序进行排序?使用数字值。 您是否使用低级工具直接在数据库中工作?使用该名称。 你有大量的数据和性能是一个问题吗?用数字
对我来说最重要的问题是大部分时间可维护性:
如果枚举在未来改变,名称要么匹配正确的失败,硬而响亮。有了数字,可以添加枚举实例,更改所有枚举的所有数字,因此您必须更新使用枚举的所有表。而且几乎没有办法知道你是否错过了一张桌子。
存储数值的另一个原因是,如果您在枚举中使用[Flags]属性,而您希望允许多个枚举值。比方说,例如,你想让某人选择一周中的哪些日子,他们可以提供某些东西......
[Flags]
public enum WeekDays
{
Monday=1,
Tuesday=2,
Wednesday=4,
Thursday=8,
Friday=16
}
在这种情况下,你可以存储在数据库中的数值为值的任意组合(例如,3 ==周一和周二)
我一直使用由字段的查询表
dbscript让我从我的查找表中生成C#代码,所以我的代码总是与数据库同步。
对于您自己的枚举,使用数字值有一个简单的原因:它允许enum
的功能的每个部分,开箱即用,没有麻烦。唯一需要注意的是,在enum
定义中,每个成员都必须明确给出一个数字值,这可以从不更改(或者至少在您完成第一次发布之后)。我总是为枚举数据库添加一个突出的评论,所以人们不会改变常量。
这里有一些原因的数值比字符串标识符更好:
[Flags]
添加到您的enum
,而不是破坏您的代码和/或现有数据[Flags]
存储在一个字符串字段:
[Flags]
与否),如果数据库进行模糊处理,该字段已经被处理,这大大地影响的能力和效率操作的方式检索/分类代码时,如在先前的点只有两个地方使用数据库中的成员名称可能是有利的情况:
enum
。查找表,这是我极力劝阻,因为他们是一个单向的子弹火车到维护的噩梦:
[Flags]
功能需要使用联结表,这意味着更复杂的查询(现有的查询需要重写)并增加了复杂性。现有的客户数据呢?enum
值。然后我们甚至不会考虑[Flags]
枚举。,如果你想获得存储在数据库中回枚举值,那就试试这个
EnumValue = DirectCast([Enum].Parse(GetType(TextJustification), reader.Item("put_field_name_here").ToString), TextJustification)
告诉我,如果你的作品
名称映射到的值枚举应该只在一个地方定义,这是枚举的定义 – 2009-06-18 20:53:18