数据库-三大范式

第一范式(1NF)

第一范式(1NF):每一个列不可再分
理解:不能有可以被继续拆分的列
比如:

不满足第一范式(1NF)

姓名 班级
张三 计科1903

拆分列后满足第一范式(1NF)

姓名 专业 班号
张三 计科 1903

第二范式(2NF)

第二范式(2NF):在第一范式的基础上,每一个行的非主属性依赖于主属性
理解:每一行必须有一个主键,并且存在多对多关系时必须拆分开

比如:

不满足2NF:

订单编号 商品编号 商品名称 商品数量 商品价格 客户姓名 客户电话
0001 1 面包 10 $5 张三 130-2483-4321
0001 2 火腿 20 $3 张三 130-2483-4321
0002 2 火腿 5 $3 李四 155-1341-4521

原因分析:

表中选用(订单编号, 商品编号)联合作为联合主键。

但是我们发现,不是所有属性字段都完全依赖联合主键的,它们或许只依赖主键中的一部分,这种部分依赖的关系是不满足2NF的!

这里的例子中,商品名称、商品价格这两个字段都是只依赖于(商品编号)这个字段的,也就是说它们只依赖于联合主键中的一部分。因此我们需要进行拆表!

1.订单信息表

订单编号 客户姓名 客户电话
0001 张三 130-2483-4321
0002 李四 155-1341-4521

2.订单商品数量表

订单编号 商品编号 商品数量
0001 1 10
0001 2 20
0002 2 5

(商品数量是同时依赖于订单编号和商品编号的, 在这个表中,订单编号和商品编号仍然是作为联合主键)

3.商品信息表

商品编号 商品名称 商品价格
1 面包 $5
2 火腿 $3

第三范式(3NF)

第三范式(3NF):消除间接依赖

理解:每一行数据除了可以存储其他表的主键不能存储非主键列

比如:

不满足第三范式(3NF)

姓名 专业 班号 课程编码 课程名称 教师
张三 计科 1903 001 计算机 王五
李四 生化 5903 003 物化 赵六

拆分后满足第三范式(3NF)

姓名 专业 班号 课程编码
张三 计科 1903 001
李四 生化 5903 003
课程名称 课程名称 教师
001 计算机 王五
003 物化 赵六

你可能感兴趣的:(数据库-三大范式)