假设我有一个项目~10个表,每个表有30个条目,它们列举值。场景1和场景2可能有哪些优点/缺点?
基于枚举表的数量/每个表的行数,这些(Dis)优势是否有转折点?
场景1:
表1:
ID Value
---------
1 - Value1
2 - Value2
3 - Value3Table2:
ID Value
---------
1 - Value4
2 - Value5
3 - Value6场景2:
Table1:
ID Value Category
---------------------
1 - Value1 - 1
2 - Value2 - 1
3 - Value3 - 1
4 - Value4 - 2
5 - Value5 - 2
6 - Value6 - 2发布于 2017-03-17 10:08:51
我会选择第一种。
主要原因是,第一个选项使您能够使用特定的外键约束,这意味着主表中的每个属性只能链接到它的相关表,而要获得与第二个选项相同的功能,您还必须使用check约束,这将迫使您创建一个更麻烦的数据库模式。
第二个原因是数据库表应该反映业务实体--第一个选项使您能够更准确地完成这一任务。
第三个原因是它允许为每个"enum“保存具有最正确数据类型的”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 --您的数据不再正确--第一个选项不可能发生这种情况。
https://stackoverflow.com/questions/42854130
复制相似问题