这个问题可能涉及规范化。但我不知道。 这是个问题。我有一张员工桌。这是表格定义。
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万行。 如果我编写选择查询以从DB中仅选择男性,我必须提到
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的Gender表中将参考ID放在Staff表中。那么Staff表中的Gender列的数据类型将是一个int。 因此,这两种方法在性能方面是相同还是不同?
答案 0 :(得分:0)
也许这应该是枚举?
CREATE TABLE(
...
Gender ENUM ('Male', 'Female')
...)
答案 1 :(得分:0)
在这种情况下,向商店性别添加新表将不会使您的设计更好,也无法帮助您提高查询速度,因为必须在两个表之间进行连接,因此没有必要这样做。
在设计数据库时,不应考虑任何UI方面,只考虑数据之间的关系。因此,在这种情况下,如果您的组合框具有Male/Female
值或MALE/FEMALE
,则无关紧要。
您可以使用tinyint(1)
并为男性/女性存储0和1(您决定哪个值属于哪个性别)或者如果您想要更明确地创建ENUM:
ENUM ( 'MALE' , 'FEMALE') .
此外,您绝对应该在此列上创建索引以提高性能。