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

标签 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 万行。 如果我编写选择查询以仅从数据库中选择男性,我必须提到

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/

相关文章:

mysql - SQL如何输出数据出现的次数?

c# - 从 .NET SqlCommand 调用时 SQL Server 批量插入失败

sql - 想要在oracle sql的MERGE语句中添加一些条件以进行插入/更新

php - 生成 uuid 的最佳实践? PHP 或 MySql

MySQL 表自连接返回太多行

mysql - MySql表引擎从innoDB切换到NDB后性能下降

php - 将 RSS pubdate 转换为 mysql 数据库中的时间戳

sql - 子查询选择 varchar(30) 的“select not in”查询

Android Room FOREIGN KEY 约束失败(代码 787)

SQL:删除自连接中的重复项