Sql 枚举值的最佳表格布局是什么?

Sql 枚举值的最佳表格布局是什么?,sql,sql-server,Sql,Sql Server,假设在不同的表中有大量字段,这些字段具有整数代码,必须与另一个表交叉引用,该表给出这些代码的文本表示,即本质上是枚举。这些代码中的每一个(出现在许多不同的表中)都将在存储枚举值的任何位置都有一个外键 主要有两种选择: 将所有枚举存储在一个定义所有枚举的大表中,然后有一列指定枚举类型 将每个枚举定义存储在一个独立的表中 哪种方式更好,尤其是在性能方面?所涉及的数据库接收大量的插入和删除操作,而读取操作相对较少。视情况而定。分开的桌子有很大的优势。您可以定义强制引用表的列类型的外键关系 第二个优

假设在不同的表中有大量字段,这些字段具有整数代码,必须与另一个表交叉引用,该表给出这些代码的文本表示,即本质上是枚举。这些代码中的每一个(出现在许多不同的表中)都将在存储枚举值的任何位置都有一个外键

主要有两种选择:

  • 将所有枚举存储在一个定义所有枚举的大表中,然后有一列指定枚举类型
  • 将每个枚举定义存储在一个独立的表中

哪种方式更好,尤其是在性能方面?所涉及的数据库接收大量的插入和删除操作,而读取操作相对较少。

视情况而定。分开的桌子有很大的优势。您可以定义强制引用表的列类型的外键关系

第二个优点是,对于不同的类型,可能有不同的数据列。例如,国家表可能有ISO2和ISO3代码和货币。城市表可能有时区

一张桌子方便的一个场合是国际化。为了将值翻译成不同的语言,我发现将它们放在一个地方很方便

单表还具有空间优势。SQL中的表存储在页上,许多引用表都小于一页。这就留下了大量未使用的空间。将它们存储在一个表中可以“压缩”它们,从而消除空间。然而,在现代世界,这很少是一个真正的考虑因素


不过,通常情况下,除非您有充分理由使用单个表,否则您会使用单独的表。

单独的枚举表,可以直接使用。更好的性能和更简单的编码、调试和测试方法。这是重复的。几年前我就回答过这样的问题,我就是找不到。