数据库设计思想(三范式)

第一范式(1Nf):(原性,数据不可再分)

定义:数据库表中所有字段都是单一的属性,不可再分的。换句话说,第一范式要求数据库中的表都是二维表。
数据库设计思想(三范式)
用户信息出现了复合属性,不具有原性(数据可再分),不符合第一范式。
修正后:
数据库设计思想(三范式)
此时,每一项信息都是不可再分的了,就符合了原性(数据不可再分)。
第二范式(2NF):唯一性,消除部分依赖。
定义:每一行数据具有唯一性,所有的非主键字段必须完全依赖于主键。消除部分依赖。
第二范式必须满足第一范式。
什么叫做依赖:就是在一个表中,某个字段的值可以由另一个字段的值来“决定”如:学号是主键,姓名,年龄,性别依赖于学号。主键决定了其他字段,其他字段依赖与主键。
什么叫做部分依赖:如果某个字段,只依赖与“部分主键”,此时为部分依赖,也就是主键字段有多个。
什么叫做完全依赖:某个字段依赖与主键的所有字段。
数据库设计思想(三范式)
这个表虽然满足第一范式,因为每个数据都是不可在分的,但其中有冗余性,学生信息和课程信息冗余。使学生姓名和课程名称作为了联合主键(主键的字段有多个),从表中看出学生的性别籍贯只跟姓名有关,学分只跟课程名称有关,跟学生姓名那个主键无关。(所以产生了部分依赖)所以不符合第二范式。
修正后的表:
数据库设计思想(三范式)
第三范式(3NF):独立性,消除传递依赖
定义:第三范式必须满足第二范式,与主键列没有直接关系的数据必须消除。每个字段都独立依赖于主键。
数据库设计思想(三范式)

学生ID决定姓名,性别,籍贯,所在系,系办地址,系办电话。但是还有另一个非主键的依赖在里边,所在系决定戏办地址,系办电话。既确定了一个学生所在系后,也就确定了他的系办所,而这里系办地址电话同过系确定了,系同过学生ID确定,这就产生了传递依赖。
也可以说系地址电话依赖了另一个非主键(所在系)违反了第三范式,实际应用中第三范式明显要求是,一个表中记录一种数据,而当前表记录了二种信息,所以要拆解为”学生信息“和”院系信息“。
修正后:
数据库设计思想(三范式)

总结:基本只要遵循 ——每个数据使用一个表来储存,就可满足以上三个范式要求。