关系数据库设计三大范式

在开发中,除了系统架构非常重要之外,数据库的设计也非常的重要,因为数据库de设计一旦完成之后,后期想改动就非常困难了.

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式。

范式是符合某一种设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式。

三大范式

第一范式(字段原子性)

第一范式指数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项.

简单说就是字段不可再拆分.

第二范式(确保表中的每列都和主键相关)

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言).

也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中.

有主键,非主键字段依赖主键.

举例:
学号, 姓名, 年龄, 课程名称, 成绩, 学分;
如果存在一张这样的表那么它就不符合第二范式了,因为其包含了学生信息和课程信息两个事务了.

如何避免出现这种情况呢?
细分表,一个表只包含一种事务.

第三范式(确保每列都和主键列直接相关,而不是间接相关)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关

举例:
id,姓名,年龄,info,城市,省份

这里的城市并不是直接依赖主键id的,因此可以拆分表.

总结

1NF:原子性 字段不可再分,否则就不是关系数据库
2NF:唯一性 一个表只说明一个事物
3NF:每列都与主键有直接关系,不存在传递依赖

根据不同的公司设计表的思路是不尽相同的,有的公司可以允许数据冗余,有的公司可能会拆分很多表.各有优缺点,根据需要和场景设计.

不是一定要严格按照范式来设计数据库.
Logo

开源、云原生的融合云平台

更多推荐