1、范式分解主属性: 包含在任一候选关键字中的属性称主属性。非主属性: 不包含在主码中的属性称为非主属性。函数依赖:是指关系中一个或一组属性的值可以决定其它属性的值。函数依赖正象一个函数 y = f(x) 一样,x 的值给定后,y 的值也就唯一地确定了。如果属性集合 Y 中每个属性的值构成的集合唯一地决定了属性集合 X 中每个属性的值构成的集合,则属性集合 X 函数依赖于属性集合 Y,计为: YX 。属性集合 Y 中的属性有时也称作函数依赖 YX 的决定因素(determinant)。例:身份证号姓名。部分函数依赖:设 X,Y 是关系 R 的两个属性集合,存在 XY,若 X是 X 的真子集,存在
2、XY,则称 Y 部分函数依赖于 X。完全函数依赖:在 R(U)中,如果 Y 函数依赖于 X,并且对于 X 的任何一个真子集 X,都有 Y 不函数依赖于 X, 则称 Y 对 X 完全函数依赖。否则称 Y 对 X 部分函数依赖。【例】;举个例子就明白了。假设一个学生有几个属性SNO 学号 SNAME 姓名 SDEPT 系 SAGE 年龄 CNO 班级号 G 成绩对于(SNO,SNAME,SDEPT,SAGE,CNO,G)来说,G 完全依赖于(SNO, CNO), 因为(SNO,CNO)可以决定 G,而 SNO 和CNO 都不能单独决定 G。而 SAGE 部分函数依赖于(SNO,CNO),因为(SN
3、O,CNO)可以决定 SAGE,而单独的 SNO 也可以决定 SAGE。传递函数依赖:设 R(U)是属性集 U 上的关系,x、y、z 是 U 的子集,在R(U)中,若 xy ,但 yx ,若 yz ,则 xz,称 z 传递函数依赖于 x,记作 XTZ。 如果 X-Y, Y-Z, 则称 Z 对 X 传递函数依赖。计算 X+ (属性的闭包) 算法: a.初始化,令 X+ = X; b.在 F 中依次查找每个没有被标记的函数依赖,若“左边属性集”包含于 X+ ,则令 X+ = X+“右边属性集”, 并为访问过的函数依赖设置标记。 c.反复执行 b 直到 X+不改变为止。检验给定的任意函数依赖 A1A
4、2.An-B 是否蕴含于依赖集 S:分析:根据属性集闭包的定义,可知 A1A2.An-A1,A2,.,An+ 蕴含于 S。只要证明 B 在A1,A2,.,An+中,那么函数依赖A1A2.An-B 肯定蕴含于依赖集 S 中求解过程:(1) 利用依赖集计算闭包(2) 如果 B 在闭包中,则函数依赖 A1A2.An-B 是否蕴含于依赖集 S,否则不蕴含于 S【例】总结: 判定函数依赖 XY 是否能由 F 导出的问题, 可转化为求X+并判定 Y 是否是 X+子集的问题。 即求 F 闭包的问题可转化为求属性集闭包的问题。函数依赖的闭包:定义:若 F 为关系模式 R(U)的函数依赖集,我们把 F 以及所有
5、被 F 逻辑蕴涵的函数依赖的集合称为 F 的闭包,记为 F+求函数依赖闭包,基于函数依赖推理规则函数依赖推理规则:若 XY-Z,则 X-Z,Y-z (错)正确的:若 X-Y, 则 XZ-YZ若 X-Y,X-Z,则 X-YZ若 X-Y,Z 属于 Y,则 X-Z若 X-Y,Y-Z ,则 X-Z若 X-YZ,则 X-Y,X-Z /可以把每个函数依赖的右边的属性分解,从而使其右边只出现一个属性伪传递率:若 A-B,BC-D,则 AC-D范式第一范式(1NF ):属性,属性值,字段不可分就是无重复的列不满足 1NF 的数据库就不是关系数据库【例】:第二范式(2NF ):符合 1NF,每一个非主属性完全依
6、赖于码,不能存在部分依赖,有主键,非主键字段依赖主键; 唯一性 一个表只说明一个事物; 【例】:不符合第二范式的例子:表:学号 , 姓名 , 年龄, 课程名称, 成绩, 学分;这个表明显说明了两个事务:学生信息, 课程信息;存在问题:数据冗余,每条记录都含有相同信息;删除异常:删除所有学生成绩,就把课程信息全删除了;插入异常:学生未选课,无法记录进数据库;更新异常:调整课程学分,所有行都调整。修正:学生:Student(学号, 姓名, 年龄);课程:Course(课程名称, 学分);选课关系:SelectCourse(学号, 课程名称 , 成绩)。满足第 2 范式只消除了插入异常。第三范式(3
7、NF ):符合 2NF,并且,消除传递依赖,非主键字段不能相互依赖; 每列都与主键有直接关系,不存在传递依赖; 若所有的属性都是主属性,则属于第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息【例】:不符合第三范式的例子:学号, 姓名 , 年龄, 所在学院, 学院联系电话,关键字为单一关键字“学号“;存在依赖传递: (学号) (所在学院) (学院地点, 学院电话)存在问题:数据冗余:有重复值;更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况删除异常修正:学生:(学号, 姓名, 年龄, 所在学院) ;学院:(学院, 地点, 电话)。 总结:1nf
8、:不可分2nf:一个表说明一个事物,唯一性3nf:对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。bcnf:是 3NF 的改进形式BCNF 意味着在关系模式中每一个决定因素都包含候选键,也就是说,只要属性或属性组 A 能够决定任何一个属性B,则 A 的子集中必须有候选键。BCNF 范式排除了任何属性对候选键的传递依赖与部分依赖。满足 BCNF 条件1 所有非主属性对每一个候选键都是完全函数依赖;2 所有的主属性对每一个不包含它的候选键,也是完全函数依赖;3 没有任何属性完全函数依赖于非候选键的任何一组属性。候选键 (又称候选码,候选关键字,码 ,candidate key)设 K 是一个 R(U)中的属性或属性集合(注意可以是属性集合,也即多个属性的组合),若 K 完全函数确定 U,则 K为 R 的候选键(Candidate key);通俗地说就是,能够确定全部属性的某个属性或某组属性,称为候选键。若候选键多于一个,则选定其中一个作为主键。*在所有依赖关系右边 没有出现的属性一定是 候选键的成员。BCNF 范式排除了任何属性对候选键的传递依赖与部分依赖。【例 1】【例 2】