gpt4 book ai didi

mysql - 单独的表格供引用还是我应该使用一张表格?

转载 作者:行者123 更新时间:2023-11-29 00:11:04 24 4
gpt4 key购买 nike

这道题可能指的是归一化。但我不知道。这是问题。我有一张员工表。这是表定义。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com