单独的表供参考或我应该使用一个表吗?

时间:2014-07-29 09:37:44

标签: mysql sql

这个问题可能涉及规范化。但我不知道。 这是个问题。我有一张员工桌。这是表格定义。

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。 因此,这两种方法在性能方面是相同还是不同?

2 个答案:

答案 0 :(得分:0)

也许这应该是枚举?

CREATE TABLE(
...
Gender ENUM ('Male', 'Female')
...)

答案 1 :(得分:0)

在这种情况下,向商店性别添加新表将不会使您的设计更好,也无法帮助您提高查询速度,因为必须在两个表之间进行连接,因此没有必要这样做。

在设计数据库时,不应考虑任何UI方面,只考虑数据之间的关系。因此,在这种情况下,如果您的组合框具有Male/Female值或MALE/FEMALE,则无关紧要。

您可以使用tinyint(1)并为男性/女性存储0和1(您决定哪个值属于哪个性别)或者如果您想要更明确地创建ENUM:

ENUM ( 'MALE' , 'FEMALE') .

此外,您绝对应该在此列上创建索引以提高性能。