范式概述与三大范式详解
范式概述
数据库设计的范式
概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求
三大范式详解
第一范式(1NF)
存在的问题:
1.:存在非常严重的数据冗余(重复):姓名 系名 系主任
2.:数据添加存在问题:添加新开设的系和系主任时,数据不合法
3:数据删除存在问题:张无忌同学毕业,删除数据,会将系数据一起删除。
第二范式(2NF)
已经解决的问题:
1.:存在非常严重的数据冗余(重复):姓名 系名 系主任
未解决的的问题:
2.:数据添加存在问题:添加新开设的系和系主任时,数据不合法
3:数据删除存在问题:张无忌同学毕业,删除数据,会将系数据一起删除。
概念:
1.函数依赖:
A-->B,如果通过A属性(属性组)的值,可以确定唯一属性B的值,则称属性B依赖与A
例如:学号-->姓名。(学号,课程名称)-->分数(学号唯一确定姓名) 10010-->张三
(学号,课程名称)-->分数(学号和课程名称唯一确定分数) (1001,Java)-->89;
2.完全函数依赖
A-->B,如果A是一个属性组,则B属性确定需要依赖A属性组中的所有属性值
如:(学号,课程名称)->分数(分数需要完全依赖与学号和课程才能得出)
3.部分函数依赖
A->B,如果A是一个属性组,那么B属性只需要依赖A属性组中的一些值即可
如:(学号,课程名称)-->姓名
4.传递函数依赖:A-->B,B-->C,则A-->C.通过A属性(属性组)的值,可以确定唯一B属性的值,通过B属性的值,可以确定唯一的C属性的值,则称C传递依赖于A
如:学号 --> 系名,系名 --> 系主任,则学号 --> 系主任(通过学号,可以确定唯一的系主任)
5.码:在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
如:该表的码为:(学号,课程名称)
主属性:码属性组中的所有属性
非主属性:除过码属性组的属性
其中,姓名,系名,系主任,都完全依赖于学号,而分数则完全依赖于(学号,课程名称)。(学号,课程名称)被其他所有属性所
完全依赖,即为该表的码
第三范式:
已经解决存在的问题
1.:存在非常严重的数据冗余(重复):姓名 系名 系主任
2.:数据添加存在问题:添加新开设的系和系主任时,数据不合法
3:数据删除存在问题:张无忌同学毕业,删除数据,会将系数据一起删除。