sql - SQL Server 数据库中的枚举

标签 sql sql-server database-design normalization

除了简单地为每个枚举创建一个查找表(以 Id、代码和名称作为列)(尤其是当每个表中的行很少时)?我找到了article这建议只为所有枚举创建一个查找表,并且该方法受到一些人在评论中的批评,称它违反了引用数据的完整性。如果枚举仅由一个表使用,那么使用一些预定义代码然后为它们添加约束(可能使用扩展属性)是一种好习惯吗?

最佳答案

  1. 就我个人而言,我喜欢为每个枚举定义一个查找表,因为它也是一种文档。如果有人想知道 id 代表什么,他可以很容易地在表中找到它。在列约束中查找此信息并不明显。

  2. 在表中添加新值比在约束中添加新值要容易得多。

  3. 如果您创建数据库图表,单个查找表会显得更有逻辑性。

  4. 如果需要,除了 ID 和文本之外,您还可以向各个查找表添加其他信息(例如注释、排序列、某种标志等)。

  5. 正如您所说,这对于引用完整性更好

但是;如果您使用代码优先方法的 o/r 映射器,那么使用编程语言提供的枚举感觉非常自然。这是因为您设计的不是数据库而是对象模型。 o/r-mapper 自动为您创建数据库。

关于sql - SQL Server 数据库中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792566/

相关文章:

sql - 如何从 postgresql 中的表中删除单引号?

php - 计算分数/排名系统的分位数 (PHP/MySQL)

sql-server - 将 PostgreSQL string_agg 移植到 SQL Server,ORDER BY 有问题

SQL - 将关系 ID 转换为分隔列表

postgresql - 避免在多台机器中 SERIAL 列重复递增

mysql - 选择不同的行

Select 语句中的 SQL 函数调用以填充 Reporting Services 报告

sql-server - 首先匹配密码然后更改密码的存储过程

mysql - 在 'going LIVE' 之后调整数据库有多容易(或其他)?

php - 从多个表中获取数据的最佳方式