数据建模三范式

简述:
1.所有表中的数据都为原子数据,不可再分
2.所有表中的所有字段都必须依赖主关键字
3.所有表中的非主关键词之间不能函数依赖关系

定义说明:
第一范式(1NF):
在关系模式R中的每一个具体关系r中,必须要有主键,并且每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系。

第二范式(2NF):
如果关系模式R中的所有非主属性都完全依赖于主关键字,则称关系R 是属于第二范式的。
例:选课关系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。 由以上条件,关键字为组合关键字(SNO,CNO)

第三范式(3NF):
关系模式R中的非主关键字不能依赖于其他非主关键字。即非主关键字之间不能有函数(传递)依赖关系。则称关系R是属于第三范式的。

实例讲解:
第一范式(无重复的列)
定义:数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性
通俗解释:一个字段只存储一项信息
eg:班级:高三年1班,应改为2个字段,一个年级、一个班级,才满足第一范式
不满足第一范式
学号     姓名     班级
0001     小红     高三年1班

改成
学号     姓名     年级     班级
0001     小红     高三年     1班

第二范式(属性完全依赖于主键)
定义:满足第一范式前提,当存在多个主键的时候,才会发生不符合第二范式的情况。比如有两个主键,不能存在这样的属性,它只依赖于其中一个主键,这就是不符合第二范式
通俗解释:任意一个字段都只依赖表中的同一个字段
eg:比如不符合第二范式
学生证 名称     学生证号     学生证办理时间     借书证名称     借书证号     借书证办理时间                

改成2张表如下
学生证表
学生证     学生证号     学生证办理时间

借书证表
借书证     借书证号     借书证把你拉时间

第三范式(属性不能传递依赖于主属性)
定义:满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。
通俗理解:一张表最多只存2层同类型信息
eg:爸爸资料表,不满足第三范式
爸爸     儿子     女儿     女儿的小熊     女儿的海绵宝宝

改成
爸爸信息表:
爸爸     儿子     女儿

女儿信息表
女儿     女儿的小熊     女儿的海绵宝宝

所谓的范式,是用来学习参考的,设计的时候根据情况,未必一定要遵守,切记。
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构;所以不能一味的去追求范式建立数据库。

你可能感兴趣的:(Model)