假设我希望表 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/