3.6.2数据库系统-范式判断:范式分类、第一范式、第二范式、第三范式、BC范式

  • 范式分类
  • 第一范式
    • 例题
  • 第二范式
    • 例题
  • 第三范式
    • 例题
  • BC范式
    • 例题

范式分类

逐步优化以解决问题:插入异常、删除异常、数据冗余

  • 1NF:属性值都是不可再分的原子值
  • 2NF:消除非主属性对候选键的部份依赖
  • 3NF:消除非主属性对候选键的传递依赖
  • BCNF:消除主属性对候选键的部分和传递依赖

主要考察方向是区分范式、有时候还有优化操作,BCNF只考察判断,不会考察优化。

第一范式

第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式。

涉及到属性是否可以再分,可以按下面归类:
简单属性和复合属性、单值属性和多值属性、NULL属性、派生属性

简单属性和复合属性
简单属性,就是原子的,不可再分的,复合属性可以划分成更细小的一些取值,一般认为,在没有说明的情况下,属性都是不可再分的,如果有说明,比如姓名,正常不说就是存name即可,如果有说明按姓,名分别去存,对应就是表两列,first_name,last_name,这样可以再细分的就是复合属性,向常见的记录地址的省市区街道,也可以按复合属性去再分。

简单属性和复合属性
单值属性和多值属性指的是取值,单值表示唯一,多值表示可以在里面记录多个值,比如电话号码、紧急联系人、家属,我们记录的时候会把这种多个属性放在一个位置上,我们就会把这个属性叫做多汁属性,即一个属性对应多个取值。

NULL属性
属性没有值,或者属性未知,表示没有意义,或者不知道。

NULL属性派生属性是可以计算出来的,比如通过出生日期计算年龄,年龄就属于派生属性,同理知道销售量和销售单价可以计算出销售额,销售额就是派生属性

例题

例如:关系模式R(系名称、高级职称人数)是否满足1NF,如果不满足,应该如何调整?

从图中,可以看出高级职称人数还可以继续按职称去分,所以不满足1NF的要求,连二维表的标准都够不上。没有达到1NF是不能成功建表的。需要把下面能够继续再分的树形作为真正的属性。

第二范式

第二范式(2NF):当且仅当实体E是第一范式(1NF),且每一个非主属性完全依赖主键(不存在部份依赖)时,则称实体E是第二范式。

例题

如下图,从关系模式看会存在哪些问题(数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?

从图中可以看出学号和课程号可以得到成绩,由课程号可以得到对应的课程学分,途中学分的数据是冗余的,会更新异常,容易更新部分,导致更新不全,可能造成数据不一致,加入有一门课程还没有学生,就没有办法插入学分,就会产生插入异常,这个课程不在使用的时候,要进行删除,会同时删除掉学生的学号信息,会产生删除异常。

如何优化?
①首先确定关系模式满足第几范式
可以看出属性值都是不可再分的原子值,因此至少满足1NF
②找候选键
在1NF的基础上,来找关系模式的候选键,从函数依赖来看,由学号和课程号才能确定唯一的学生对应课程的成绩,这两个条件缺一不可,因此可以得到候选键是学号和课程号,候选键(学号,课程号)
③知道候选键,求主属性和非主属性
主属性:学号、课程号
非主属性:成绩、学分
④是否存在非主属性对候选键的部分函数依赖
如果候选键是单属性,则不可能出现部分函数依赖
所以考虑2NF的时候,都是出现组合候选键,由非主属性部分依赖依赖于候选键
学分只依赖于课程号,不依赖于学号,所以是非主属性部分函数依赖候选键
因此只达到了1NF,想要优化达到2NF,要拆分关系,拆分关系时要注意,保留原有的函数依赖关系
(课程号,学分)
(学号,课程号,成绩)

第三范式

第三范式(3NF):当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖于码(即候选键)时,则称实体是第三范式。

非主属性传递依赖于码时:A→B,B→C,C传递依赖于A,且B为非主属性,则满足第三范式。

只有达到第三范式,才能解决数据冗余、更新异常、插入异常、删除异常问题。

在考虑规范化程度的情况下,如果没有非主属性,则认为至少能够达到3NF。

例题

如下图,从关系模式看会存在哪些问题(数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?

如图可知,学号→姓名,学号→系号,系号→系名,系号→系位置
分析属于第几范式
①首先确定关系模式满足第几范式
可以看出属性值都是不可再分的原子值,因此至少满足1NF
②找候选键
这里是学号
③知道候选键,求主属性和非主属性
主属性:学号
非主属性:姓名,系号,系名,系位置
④是否存在非主属性对候选键的部分函数依赖
如果候选键是单属性,则不可能出现部分函数依赖
所以考虑2NF的时候,都是出现组合候选键,由非主属性部分依赖依赖于候选键
而候选键只有一个属性,学号,因此不可能存在部分函数依赖
所以满足2NF
⑤看没有非主属性是否传递依赖于候选键
学号→姓名,学号→系号,系号→系名,系号→系位置
可知,系名,系位置都通过系号得出,因此是传递依赖于学号

所以规范化程度只能达到第二范式,要优化成第三范式,需要对系号的关系进行拆分,将系号相关的作为另一个关系模式,系号需要保留,来作为两个关系模式的关联方式

(学号,姓名,系号)
(系号,系名,系位置)

BC范式

BC范式(BCNF):设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。

BCNF的规范化程度就很高了,它是消除主属性对相应的候选键产生的部分函数依赖和传递函数依赖,没有消除就不满足BC,消除就满足。左侧决定因素都包含候选码。

一般达到3NF就可以,BCNF拆的太细,会涉及到多表联表查询,而联合查询效率低,因此为了查询效率出现了反规范化的思想。

例题

关系模式STJ(S,T,J)中,S表示学生,T表示老师,J表示课程。每一老师只教一门课程。没门课程有若干老师,某一学生选定某门课,就对应一个固定老师。


函数依赖集合为:F={T→J,SJ→T}
①判断是否满足1NF
属性不可再分满足
②判断候选键
候选键只出现在左侧,入度为0的是候选键
候选键为两个组合键SJ,ST
③判断主属性和非主属性
候选键为两个组合键SJ,ST,也就是STJ都是主属性,即没有非主属性,满足2NF
④考虑部分函数依赖
在候选键存在组合键的情况下,有可能出现部分函数依赖

考虑的部分函数依赖是非主属性对候选键的部分函数依赖,而没有非主属性,则说明没有这部分依赖,也就是说,消除了非主属性对候选键的部分函数依赖,满足2NF

没有非主属性,则满足3NF,没有非主属性传递依赖于码(即候选键)时,则称实体是第三范式。

在考虑规范化程度的情况下,如果没有非主属性,则认为至少能够达到3NF。
⑤根据定义判断是否满足BCNF
函数依赖集合为:F={T→J,SJ→T}
候选键为两个组合键SJ,ST
T→J的T不包含候选键
SJ→T的SJ包含候选键

定义:BC范式(BCNF):设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。

需要都包含才能达到BCNF,所以不满足,只达到了3NF。