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

mrb*_*lah 11 c# database enums constants

说我的数据库表有像列UserType,SalesType等等.

我应该有数据库表UserTypeID,userTypeName还是应该创建一个C#枚举?

Meh*_*ari 12

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

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


Jam*_*Ide 7

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

查找表:

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

枚举:

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