nhibernate - 数据库和 O/RM 中的枚举

标签 nhibernate database-design orm enums lookup-tables

假设我希望表 Regions 中的条目具有类型,例如一个城市,一个国家等。假设我将使用 O/RM(在我的例子中是 NHibernate),存储这种类型的可接受的方式是什么?我看到两个选项:

  • 在 C# 业务层中有一个包含类型的枚举,并将类型作为 tinyint 存储在表中。
  • 拥有一个包含类型标识符(字符串或整数)的查找表 RegionTypes,并在 Regions 表中引用它们。

从数据库的角度来看,第二种方法似乎更合理,因为我有外键约束,而且我可以拥有有关区域类型的附加数据,例如城市是国家/地区的子类型(由于我使用的是 SQL Server 2008 空间功能,因此我实际上需要此信息来进行空间操作)。然而,从 C# 的角度来看,我基本上必须有一个实体 RegionType ,并在每次我想将它分配给一个区域时从数据库加载它(据我了解 NHibernate 不会这样做)如果我将其存储在查找表中,则不允许我将该类型设为枚举)。对于这样一个简单的任务来说,这有点乏味,因为区域类型基本上是固定的,不太可能改变。

其他类型怎么样,比如DayOfWeek,它们不太可能改变或具有其他属性,它们应该有自己的查找表和实体吗?

最佳答案

如果您确定用户永远不会更改一组值,则一般规则是使用枚举。否则最好使用查找表。

关于nhibernate - 数据库和 O/RM 中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1278835/

相关文章:

SQL - 调查数据,循环调查问题的表模式设计

c# - 哪种数据库类型更适合高性能目的?

sql - Fowler 时间表达式的关系模式

java - Hibernate、id、oracle、序列

nhibernate - 强制惰性实体加载真实实例

c# - NHibernate.Mapping 异常。 Namespace.className 没有持久化器

asp.net-mvc - 服务层正在重复我的存储库

asp.net-mvc - 在 asp.net mvc 应用程序中处理 StaleObjectStateException 的位置?

postgresql - 进行 Postgres 数据库表的所有对所有联合的最简单方法?

php - 来自实体的 Doctrine 2 更新