我不确定标题问题。只是为了详细说明。
我有表用户,并有列:
并将列 Type 更改为 Type_id ,并将其引用到 User_type表。而不是插入字符串值 [“ Admin”,“ Operator”等] 。现在,我为Admin输入整数1,为操作员插入2,为维护者插入3。
希望有人能启发我,我是数据库设计的初学者。
答案 0 :(得分:2)
您对这一要求提出质疑是正确的,因为您的同事显然并没有清楚解释为什么如此重要。
事实是,数据库规范化中没有规则要求我们使用 pseudokey ,该规则类似于您的Type_id
示例。
创建一个User_type
的查找表是一个好主意,这样您就可以得到系统允许的用户类型的简明列表。如果添加新类型,则只需在该查询表中插入一行,然后引用该查询表的Users
表将被允许使用新类型。
但是归一化规则没有理由要求引用必须是整数。您可以将查找表的主键设置为字符串。
CREATE TABLE User_type (
Type VARCHAR(10) NOT NULL PRIMARY KEY
);
CREATE TABLE Users (
...
Type VARCHAR(10) NOT NULL,
FOREIGN KEY (Type) REFERENCES User_type(Type)
);
那为什么您的“某人”告诉您必须使用整数Type_id
?
嗯,可能有原因,但这不是归因于规范化规则。
答案 1 :(得分:0)
您所做的是正确的,但是它将增加数据冗余,这意味着您在该列中一次又一次使用相同的值。因此,在这种情况下,您可以使用规范化并将列中的数据分开。有很多优点。就像您以后要将“管理员”更改为“管理员”一样,则只需更新一行。
https://en.wikipedia.org/wiki/Data_redundancy
https://en.wikipedia.org/wiki/Database_normalization
数据冗余和数据库规范化是RDBMS的基本概念。