MENU

数据库设计之三大范式

February 5, 2020 • 数据库

第一范式(1NF)

数据表中的每一个字段都是不可分割的最小单元,及要保证字段的原子性。

例如:

工号姓名年龄地址
z00001张三25广东省佛山市大沥镇永平村三组 4 号
l00002李四33陕西省西安市南二环中段长安大学
w00003王麻子34四川省成都市武侯区浆洗街 6 号

上表不符合第一范式,因为「地址」字段可拆分为「省」、「市」、「地址」多个字段。

满足第一范式后:

工号姓名年龄地址
z00001张三25广东省佛山市大沥镇永平村三组 4 号
l00002李四33陕西省西安市南二环中段长安大学
w00003王麻子34四川省成都市武侯区浆洗街 6 号

第二范式(2NF)

在满足第一范式的前提下,表中的非主键字段要完全依赖主键字段,即必须与主键有关系。

例如:

工号姓名年龄客户编号客户名称
z00001张三25C0001华为
l00002李四33C0002腾讯
w00003王麻子34C0003阿里巴巴

上表满足了第一范式,但其中「客户编号」、「客户名称」并不依赖主键「工号」字段,因此不符合第二范式,需要拆分表。

满足第二范式后:

工号姓名年龄
z00001张三25
l00002李四33
w00003王麻子34
客户编号客户名称
C0001华为
C0002腾讯
C0003阿里巴巴
员工工号客户编号
z00001C0001
l00002C0002
w00003C0003

第三范式(3NF)

在满足第二范式的前提下,表中的非主键字段应直接依赖主键字段,而非间接依赖,即形成依赖传递。

例如:

工号姓名年龄部门电话所在部门
z00001张三25010-2123123人事部
l00002李四33010-2009889公共关系部
w00003王麻子34010-2009889公共关系部

上表满足第二范式,但其中的「部门电话」依赖「所在部门」,而「所在部门」则依赖「工号」,因此不满足第三范式。

满足第三范式后:

工号姓名年龄所在部门
z00001张三25b001
l00002李四33b002
w00003王麻子34b003
部门编号部门名称部门电话
b001010-2123123人事部
b002010-2009889公共关系部
b003010-2009889公共关系部