规范化这些表的更好方法?

时间:2021-07-27 16:03:05

标签: mysql database-design

这更像是一个后端设计问题。我将使用以下 3 个表来填充网络应用中的下拉列表。

CREATE TABLE request_types(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name as varchar(32) NOT NULL
);

CREATE TABLE citizenship_types(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name as varchar(32) NOT NULL
);

CREATE TABLE designation_types(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name as varchar(32) NOT NULL
);

所有 3 个表的设计都是相同的,所以我想知道将所有 3 个表的数据放在一个表中并使用另一个表来区分值属于哪个组,这样做是否是更好的做法

CREATE TABLE field_types(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name as varchar(32) NOT NULL,
    category TINYINT NOT NULL
)


CREATE TABLE category_types(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name as varchar(32) NOT NULL
)

category_types 将像这样填充:

{
    1:"request",
    2:"citizenship",
    3:"designation"
}

1 个答案:

答案 0 :(得分:1)

这实际上没有标准化。您无法说出任何会导致您进行这种设计的数据库规范化规则。

规范化规则之一是属性列必须依赖于表的键,而不是另一个属性列。在您的设计中,name 属性部分取决于非键列 category

我建议阅读SQL and Relational Theory之类的书。