数据库设计三范式

数据库设计

◼ 数据库的设计主要包含了设计表结构和表之间的联系,在设计的
过程中,有一些规则应该遵守,这些规则就叫范式。
◼ 三范式是为了减少数据冗余而存在的。

第一范式

▪ 第一范式(确保每列保持原子性)
▪ 如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
列不可分
例1
如果这些人都住在一个小区,那么address就出现冗余。而改为第二种,占的空间就会小。满足第一范式。
在这里插入图片描述

例2
地址:省 市 区 街道
如果系统经常会访问“地址”属性中的“城市”部分,
那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。

第二范式

◼ 满足第二范式(2NF)必须先满足第一范式(1NF)
◼ 确保表中的每列都和主键相关,而不能只与主键的某一部分相
关(主要针对联合主键而言)。
不能部分依赖,列必须直接依赖主键
在这里插入图片描述
进行一个表分解:
在这里插入图片描述
如果在进行表设计的时候,那些列如果可以单独地构成一张新的实体,或新的一张表的时候,就把那一部分拿出来,成一张新的表,再建立一些关系在里面,这就是第二范式

第三范式

▪ 满足第三范式(3NF)必须先满足第二范式(2NF)
▪ 第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关
不能存在传递依赖
比如下面就满足第三范式。客户名称和客户编号是强依赖关系,但和订单编号不是。如果客户名称跟在订单信息表后面,那么就出现了传递依赖,
在这里插入图片描述

三范式呈现到数据库中就是表依赖关系。

表依赖关系
一对一: 身份证
一对多: 老师对学生
多对多: 一个学生有多门课,课有多个学生