@[toc]

三范式作用

按照三范式设计的表不会出现数据冗余!!
实际开发以顾客需求为主,有时会用冗余换速度,打破设计三范式!

第一范式

任何一张表都应该有主键,并且每一个字段原子性不可再分!

第二范式

建立在第一范式基础之上!所有非主键字段完全依赖主键,不能产生部分依赖!
举例:

  1. 学生表stu 教师表tea 关系表stu_tea 联合主键:sno-tno
  2. sno sname tno tname sno tno sname tname
  3. -------------- -------------- 1 1 张三 王老师
  4. 1 张三 1 王老师 1 3 张三 李老师
  5. 2 李四 2 张老师 违反第二范式,sname部份依赖于sno
  6. 3 王五 3 李老师 tname部份依赖于tno
  7. 没有完全依赖主键

正确方案,处理多对多:多对多,三张表,关系表里俩外键!

  1. 关系表stu_tea
  2. id(pk) sno tno
  3. 1 1 1
  4. 2 1 3

第三范式

建立在第二范式基础之上!所有非主键字段直接依赖主键,不能产生传递依赖!

举例:班级名称依赖于班级编号,产生冗余!
数据库设计三范式 - 图1

解决方案:拆分表! 一对多,两张表,多的表加外键!

学生表-班级编号为外键!
数据库设计三范式 - 图2

班级表
数据库设计三范式 - 图3

一对一

主外键共享!

数据库设计三范式 - 图4


外键唯一!

数据库设计三范式 - 图5