我应该将枚举 ID/值存储在数据库中还是 C# 枚举中?

发布于 2024-07-17 20:31:37 字数 156 浏览 6 评论 0原文

假设我的数据库表包含 UserTypeSalesType 等列。

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

Say my database tables have columns like UserType, SalesType, etc.

Should I have database tables with UserTypeID, userTypeName or should I just create a C# enumeration?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浊酒尽余欢 2024-07-24 20:31:37

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

如果值是严格不变的(例如性别),您可以将它们作为枚举以便于在应用程序中引用,也可以在数据库中作为单独的表来强制执行外键并作为引用。

What's wrong with both? If value's are user-defined or changing, definitely enum will not be suitable.

If values are strictly non-changing (such as gender), you can have them as enums for ease of reference in the application and also in the DB as separate table to enforce foreign keys and as a reference.

朱染 2024-07-24 20:31:37

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

查找表:

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

枚举:

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

It depends. I listed a few pros and cons for each approach below. In general, I strongly prefer enums if the application needs to use a value to make decisions. As Mehdrad mentioned, you can use both approaches but it requires extra effort to keep the lists in sync.

Lookup tables:

  • Referential integrity can be enforced
    through foreign keys
  • Easy to add or remove existing values
  • Table can be extended to add additional fields (active flag, etc.)
  • Requires additional class if using business objects
  • Easy to use value and description in reports

Enum:

  • Check constraint can enforce data integrity
  • Best choice if code needs to use value for branching (e.g. x == SalesType.Web vs. x == "WEB")
  • Requires software release to change values
  • Cannot display description in SQL queries (without CASE)
  • Enum may not be appropriate for display in UI (there are workarounds)
少女情怀诗 2024-07-24 20:31:37

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

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

In my projects, I use my application dbscript to generate C# consts from database, so code always matches db values.

Of course, you only need to have C# enums if your code does something specific depending on the value of the Type field.

强辩 2024-07-24 20:31:37

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

If the list is stable enough to use an enum, then I would use an enum in your code plus a table in the database (make it a foreign key for data consistency).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文