在 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 - 您的数据不再正确 - 第一个选项不会发生这种情况。
假设我有一个项目 ~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 - 您的数据不再正确 - 第一个选项不会发生这种情况。