规范化这些表的更好方法?
Better way to normalize these tables?
这更像是一个后端设计问题。我将使用以下 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"
}
这实际上没有归一化。您无法命名任何会引导您进行此设计的数据库规范化规则。
规范化规则之一是属性列必须仅 table 的键,而不是另一个属性列。在您的设计中,name
属性部分取决于非键列 category
.
我建议阅读 SQL and Relational Theory 这样的书。
这更像是一个后端设计问题。我将使用以下 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"
}
这实际上没有归一化。您无法命名任何会引导您进行此设计的数据库规范化规则。
规范化规则之一是属性列必须仅 table 的键,而不是另一个属性列。在您的设计中,name
属性部分取决于非键列 category
.
我建议阅读 SQL and Relational Theory 这样的书。