在 SQL 服务器中制作单独的枚举 table 与带有类别列的服务器 table 的优缺点是什么?

What are the pros and cons of make seperate enum tables in SQL Server vs one table with a category column?

假设我有一个项目 ~10 tables,每个项目有 ~30 个条目,枚举值。关于场景 1 和场景 2,有哪些可能 advantages/disadvantages?

根据每个 table 的枚举 tables/amount 行数,这些(缺点)优势是否存在转折点?

场景一:

Table 1:

ID   Value
---------
1 - Value1
2 - Value2
3 - Value3

Table2:

ID   Value
---------
1 - Value4
2 - Value5
3 - Value6

场景二:

Table1:

ID   Value   Category
---------------------
1 - Value1 - 1
2 - Value2 - 1
3 - Value3 - 1
4 - Value4 - 2
5 - Value5 - 2
6 - Value6 - 2

我会选择选项一。

主要原因是第一个选项使您能够使用特定的外键约束,这意味着主 table(s) 中的每个属性只能链接到它的相关 table,虽然要使用第二个选项实现相同的目的,您还必须使用检查约束,这将迫使您创建更麻烦的数据库模式。

第二个原因是数据库 table 应该反映业务实体 - 第一个选项使您能够更准确地做到这一点。

第三个原因是它可以让你保存"enums"每个"enum"最正确的数据类型。

让我们来看一个更详细的示例 - 假设您的数据库用于销售衬衫。衬衫有许多可以验证的细节 - 例如颜色和尺寸。

您的第一个选项将转换为如下内容:

Create table Shirts
(
    Id int,
    Model_Id int,
    Color_Id int,
    Size_Id int
)

Create table Models
(
    Id int, 
    Name varchar(50)
)

Create table Colors
(
    Id int, 
    Name varchar(20)
)

Create table Sizes 
(
    Id int, 
    Name varchar(5)
)

第二个翻译成这样:

Create table Shirts
(
    Id int,
    Model_Id int,
    Color_Id int,
    Size_Id int
)

Create table Enums
(
    Id int, 
    Name varchar(50),
    Categoery_Id int
)

Create table Categories
(
    Id int,
    Name  --(Model, Color, Size etc`)
)

现在假设有人更改了枚举中​​特定记录的 category_id table - 您的数据不再正确 - 第一个选项不会发生这种情况。