第一范式:有主键,原子性。
在阐述第二范式之前先阐述一下我对依赖的理解,依赖即一个属性值可以由另一个的值决定,因为主键可以唯一的标识一条记录,因此一条记录中任何非主键属性都由依赖于主键(由主键的设计定义即可得知这种关系),即主键一定,属性值也都定了,但是属性与属性之间也可能出现依赖现象,因此便有了传递依赖以及部分依赖,而第二范式,第三范式就是为了解决这种现象。
第二范式:避免部份依赖。多对多关系冗余在一张表中,为了满足第一范式出现了复合主键,会出现部分依赖情况。解决方案:三张表,A表、B表、关系表。
一个学生有多名老师,一名老师有多位学生。这个表中复合主键是学生ID+教师ID,主键出现决定了元组每个属性的值,但是学生姓名其实是由主键的组成部分学生ID决定的,教师姓名其实是由主键的组成部分教师ID决定的,产生了部分依赖。
第三范式:满足前两个范式的条件下,避免传递依赖。出现在多对一关系。解决方案:两张表,多加外键。(一间教室包含多名同学,同学就是多的那方,在其表中加外键)
一名学生对应一个教室,一间教师对应多名同学。此时主键不是复合主键因此不存在部分依赖,因此满足1第二范式,但是一年一班依赖于班级编号,班级编号依赖于学生编号,即传递依赖。