2

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

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

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

其他类型(例如DayOfWeek不太可能更改或具有其他属性)的其他类型应该有自己的查找表和实体吗?

4

3 回答 3

2

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

于 2009-08-14T17:32:30.633 回答
1

使用查找表的一个原因是在菜单或其他内容中显示可能值的常见用例。查询查找表很容易,但如果枚举在数据库数据类型或约束或 C# 枚举中硬编码,则不太容易。

于 2009-08-14T17:26:57.260 回答
0

不过,我通常使用后一种选项,我将创建一种通用类型的设置,其中可以将多种类型的项目存储在同一个表中,这样我就不会得到 15 个类型的表。基础是这样的

Types
   TypeID int,
   Name varchar(20),
   Description varchar(100)

Type_Items
   ItemID int,
   TypeID int -> Types.TypeID,
   Name varchar(20),
   Description varchar(100),
   Value varchar(100)
于 2009-08-14T16:40:27.150 回答