首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与带有类别列的表相比,在Server中创建单独的枚举表的利弊是什么?

与带有类别列的表相比,在Server中创建单独的枚举表的利弊是什么?
EN

Stack Overflow用户
提问于 2017-03-17 09:47:18
回答 1查看 368关注 0票数 1

假设我有一个项目~10个表,每个表有30个条目,它们列举值。场景1和场景2可能有哪些优点/缺点?

基于枚举表的数量/每个表的行数,这些(Dis)优势是否有转折点?

场景1:

表1:

代码语言:javascript
复制
ID   Value
---------
1 - Value1
2 - Value2
3 - Value3

Table2:

代码语言:javascript
复制
ID   Value
---------
1 - Value4
2 - Value5
3 - Value6

场景2:

Table1:

代码语言:javascript
复制
ID   Value   Category
---------------------
1 - Value1 - 1
2 - Value2 - 1
3 - Value3 - 1
4 - Value4 - 2
5 - Value5 - 2
6 - Value6 - 2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 10:08:51

我会选择第一种。

主要原因是,第一个选项使您能够使用特定的外键约束,这意味着主表中的每个属性只能链接到它的相关表,而要获得与第二个选项相同的功能,您还必须使用check约束,这将迫使您创建一个更麻烦的数据库模式。

第二个原因是数据库表应该反映业务实体--第一个选项使您能够更准确地完成这一任务。

第三个原因是它允许为每个"enum“保存具有最正确数据类型的”enum“。

让我们回顾一个更详细的例子--假设您的数据库是用于销售衬衫的。衬衫有一个可以验证的细节,比如颜色和尺寸。

您的第一个选择将转化为如下内容:

代码语言:javascript
复制
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)
)

第二个问题将转化为:

代码语言:javascript
复制
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 --您的数据不再正确--第一个选项不可能发生这种情况。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42854130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档