一文了解 MYSQL 三大范式和表约束
当我们设计和使用数据库时,通常需要遵守一些规范和限制,以确保数据库的数据结构和数据查询都能够满足我们的需求。MYSQL 三大范式和表约束就是其中的两个关键概念。
什么是 MYSQL 三大范式
MYSQL 三大范式是数据库设计中的一种标准化方法,旨在确保数据库中的数据具有高度的一致性和完整性。这个标准定义了三个级别,每个级别都有一些规则。只有一个级别的规则满足后,才能进行下一个级别的规则检查。
第一范式(1NF)
第一范式(1NF)是指所有的数据都必须是原子性的,不可再分解。在数据库表设计中,每一列的数据值都必须是单一值的。
例如,在用户信息表中,我们可以将所有的用户信息都放入同一个表中,但是每个字段都必须是单一值的。如下所示:
ID | 姓名 | 性别 | 生日 | 地址 |
---|---|---|---|---|
1 | 张三 | 男 | 1988-8-8 | 北京市朝阳区 |
2 | 李四 | 女 | 1990-3-5 | 北京市海淀区 |
在这个例子中,每个字段都只包含了一个数据值,因此符合第一范式。
第二范式(2NF)
在第一范式的基础上,第二范式(2NF)进一步要求数据库中的每个表都有一个主键,并且该表中的所有非主键列都完全依赖于主键。
例如,我们可以将学生的成绩拆分成两个表,分别是学生信息表和学生成绩表。它们的关系如下:
学生信息表
学号 | 姓名 | 年龄 | 班级 |
---|---|---|---|
001 | 小明 | 10 | 一班 |
002 | 小红 | 9 | 二班 |
学生成绩表
学号 | 课程名 | 成绩 |
---|---|---|
001 | 数学 | 80 |
001 | 语文 | 75 |
002 | 数学 | 85 |
在这个例子中,学生成绩表是通过“学号”这个主键与学生信息表相关联的。同时,学生成绩表中的所有非主键字段(课程名、成绩)都依赖于主键“学号”,因此符合第二范式标准。
第三范式(3NF)
在第二范式的基础上,第三范式(3NF)要求不允许任何非主键列之间存在依赖关系。
例如,我们可以将用户的订单信息拆分成三个表,分别是用户信息表、订单信息表和商品信息表。它们的关系如下:
用户信息表
ID | 姓名 |
---|---|
1 | 张三 |
2 | 李四 |
订单信息表
订单号 | 用户ID | 订单日期 |
---|---|---|
001 | 1 | 2021-10-10 |
002 | 2 | 2021-10-11 |
商品信息表
商品号 | 商品名 | 价格 |
---|---|---|
001 | 苹果 | 5 |
002 | 香蕉 | 3 |
在这个例子中,订单信息表中的“用户ID”与用户信息表中的“ID”相对应,商品信息表中的“商品号”与订单信息表中的“商品号”相对应。这个设计遵循了第三范式,每个表都只包含一个相关数据值,没有重复信息,提高了数据库模块的数据的实时性和完整性。
什么是表约束
表约束是指在数据库表中设定的一些限制条件,它们可以确保数据的一致性和完整性。常见的表约束有主键约束、唯一性约束、外键约束和检查约束。
- 主键约束
主键约束是指在数据库表中,用来唯一标示每条数据的字段或字段组合。主键必须满足以下条件:
- 不能为 NULL 值
- 唯一标识每条记录
- 不能重复
例如,在用户信息表中,我们可以使用“ID”字段设置主键约束,如下所示:
CREATE TABLE user(
ID INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT
);
- 唯一性约束
唯一性约束是指在数据库表中,用来保证某个字段或字段组合的唯一性。唯一性约束必须满足以下条件:
- 不能重复
例如,我们可以在商品信息表中,使用“商品名”字段设置唯一性约束,如下所示:
CREATE TABLE product(
ID INT AUTO_INCREMENT,
name VARCHAR(50) UNIQUE,
price DECIMAL(10,2),
PRIMARY KEY (ID)
);
- 外键约束
外键约束是指在数据库表中,对某个字段设置的连接到其他表的约束。外键必须满足以下条件:
- 参考的表必须存在该字段
- 该字段的数据类型必须与参考表的主键数据类型一致
例如,我们可以在订单信息表中,使用“用户ID”字段设置外键约束,如下所示:
CREATE TABLE order(
order_id INT PRIMARY KEY,
user_id INT,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES user(ID)
);
- 检查约束
检查约束是指在数据库表中,对某个字段设置的旨在确保数据合法性的约束。检查约束必须满足以下条件:
- 可以自定义某个字段的限制规则
- 可以确保某个字段的数据类型、数据范围、大小合法
例如,我们可以在用户信息表中,使用“age”字段设置检查约束,要求该字段的值必须大于18岁,如下所示:
CREATE TABLE user(
ID INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK (age>18)
);
结论
MYSQL 三大范式和表约束是数据库设计中非常重要的概念,合理的使用这些概念可以使我们的数据结构更加清晰明了,数据的完整性和一致性也会得到保证。根据实际需求,我们需要根据三大范式和表约束的标准化方法设计出结构合理的数据库表。这样的数据库表可以随着应用程序的不断发展,更加容易维护,扩展性高,降低维护和开发成本。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文了解MYSQL三大范式和表约束 - Python技术站