设计这个的最佳实践:C# 中的枚举或单独的数据库 table
Best pratice to design this: enum in c# or separate database table
我正在 table 中创建记录,其中一列称为 TYPE。我以编程方式循环遍历 c# 中的枚举并创建此行。枚举包含事物的类型,例如
- 汽车
- 飞机
- 船
- ...
重要的是,这种类型绑定到逻辑。我的一个问题:
我应该将这些类型放在上面描述的枚举中,还是将它们放在单独的 table 中以获得规范化形式更好。
你更喜欢什么?
取决于两件事:
- 值是不是table?1
- 您需要附加其他信息吗?2
如果上述任何问题的答案是 "yes",那么使用专用查找 table 可能是个好主意。否则,在整个系统中广为人知且有据可查的常量枚举值3 是可以的。
重点是:不要像有时建议的那样盲目地使用查找 tables。它们当然有其用武之地,但也有一些情况 不应 使用。
1 可以更改或删除现有值,也可以添加新值。
2 例如人类可读(并可能本地化)的名称或描述,或者从数据库内容驱动逻辑的某种方式,而不是硬编码。
3 通常是简单的整数。如果您发现自己需要使用字符串,那可能意味着您应该回答 "yes" 问题 (2)。
我正在 table 中创建记录,其中一列称为 TYPE。我以编程方式循环遍历 c# 中的枚举并创建此行。枚举包含事物的类型,例如
- 汽车
- 飞机
- 船
- ...
重要的是,这种类型绑定到逻辑。我的一个问题:
我应该将这些类型放在上面描述的枚举中,还是将它们放在单独的 table 中以获得规范化形式更好。
你更喜欢什么?
取决于两件事:
- 值是不是table?1
- 您需要附加其他信息吗?2
如果上述任何问题的答案是 "yes",那么使用专用查找 table 可能是个好主意。否则,在整个系统中广为人知且有据可查的常量枚举值3 是可以的。
重点是:不要像有时建议的那样盲目地使用查找 tables。它们当然有其用武之地,但也有一些情况 不应 使用。
1 可以更改或删除现有值,也可以添加新值。
2 例如人类可读(并可能本地化)的名称或描述,或者从数据库内容驱动逻辑的某种方式,而不是硬编码。
3 通常是简单的整数。如果您发现自己需要使用字符串,那可能意味着您应该回答 "yes" 问题 (2)。