我应该在数据库或C#枚举中存储枚举ID /值吗?

时间:2009-04-26 15:16:18

标签: c# database enums constants

假设我的数据库表包含UserTypeSalesType

我是否应该拥有包含UserTypeIDuserTypeName的数据库表,还是应该创建一个C#枚举?

4 个答案:

答案 0 :(得分:12)

两者都有什么问题?如果值是用户定义的或更改的,那么enum绝对不合适。

如果值严格不变(例如性别),则可以将它们设置为enums以便于在应用程序中引用,也可以将数据库作为单独的表来强制使用外键并作为参考。

答案 1 :(得分:7)

这取决于。我列出了以下每种方法的一些优缺点。一般来说,如果应用程序需要使用值来做出决策,我更喜欢枚举。正如Mehdrad所提到的,您可以使用这两种方法,但需要额外的努力才能使列表保持同步。

查找表:

  • 可以强制执行参照完整性 通过外键
  • 轻松添加或删除现有值
  • 可以扩展表以添加其他字段(活动标记等)
  • 如果使用业务对象,则需要其他类
  • 报告中易于使用的价值和描述

枚举:

  • 检查约束可以强制执行数据完整性
  • 代码需要使用分支值的最佳选择(例如x == SalesType.Web与x ==“WEB”)
  • 需要软件版本才能更改值
  • 无法在SQL查询中显示说明(不使用CASE)
  • 枚举可能不适合在UI中显示(有解决方法)

答案 2 :(得分:0)

如果列表足够稳定以使用枚举,那么我将在代码中使用枚举加上数据库中的表(使其成为数据一致性的外键)。

答案 3 :(得分:0)

在我的项目中,我使用我的应用程序dbscript从数据库生成C#consts,因此代码总是匹配db值。

当然,如果您的代码根据Type字段的值执行特定的操作,您只需要拥有C#枚举。