这道题可能指的是归一化。但我不知道。 这是问题。我有一张员工表。这是表定义。
CREATE TABLE GG.`0_staffmaster_1` (
Code int(11) NOT NULL AUTO_INCREMENT,
Name varchar(200) DEFAULT NULL,
Designation varchar(100) DEFAULT NULL,
NicNo varchar(20) DEFAULT NULL,
PassportNo varchar(20 DEFAULT NULL,
DrivingLicence varchar(20) DEFAULT NULL,
DateofBirth date DEFAULT NULL,
DateofRecruited date DEFAULT NULL,
Gender varchar(5)
)
CHARACTER SET utf8
COLLATE utf8_general_ci;
因此,在性别列中,我插入了“男性”或“女性”。在表单中,我有一个组合框来选择男性和女性。所以假设这个表将有 500 万行。 如果我编写选择查询以仅从数据库中选择男性,我必须提到
Select Name from 0_staffmaster_1 where Gender='Male';
很好。
但是如果我这样做呢? 我将使用单独的表来存储男性和女性记录。
CREATE TABLE GG.`0_Gender_1` (
id int(11) NOT NULL AUTO_INCREMENT,
gender_Name varchar(10) DEFAULT NULL
);
insert into 0_Gender_1(gender_Name) values('Male');
insert into 0_Gender_1(gender_Name) values('Female');
然后我所做的只是将具有特定性别 ID 的性别表中的引用 ID 放入员工表中。那么 Staff 表中 Gender 列的数据类型将是一个 int。 那么这两种方法在性能方面是相同的还是不同的?
最佳答案
添加一个新表来存储性别,在这种情况下,不会让您的设计更好,也不会帮助您提高查询速度,因为两个表之间的连接是必要的,所以这样做没有意义。
在设计数据库时,您不应考虑任何 UI 方面,而应仅考虑数据之间的关系。因此,在这种情况下,您的组合框是否具有 Male/Female
值或 MALE/FEMALE
都无关紧要。
你可以只使用 tinyint(1)
并为男性/女性存储 0 和 1(你决定哪个值属于哪个性别)或者如果你想更明确地创建一个 ENUM :
ENUM ( 'MALE' , 'FEMALE') .
此外,您绝对应该在此列上创建索引以提高性能。
关于mysql - 单独的表格供引用还是我应该使用一张表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012238/