5.5 函数依赖与2NF、3NF 和BCNF 函数依赖是关系模式中数据语义较小但是很基本的一个部分。函数依赖引起的问题主要是数据冗余及其数据操作异常,解决的办法是进行关系模式的合理分解。那么,分解时应当遵循怎样的思路?分解到怎样的程度才算是“规范”模式?本节就着重讨论这些问题。 5.5.1 第一范式——1NF 如果一个关系模式R 中每个属性值都是一个不可分解的数据量,则称该关系模式满足第一范式(First Normal Form),记为 R∈1NF。 第一范式规定了一个关系中的属性值必须是“原子”的,它排斥了属性值为元组、数组或某种复合数据的可能性,使得关系数据库中所有关系的属性值都是“最简形式”,这样要求的意义在于可以做到起始结构简单,为以后复杂情形讨论带来方便。一般而言,每一个关系模式都必须满足第一范式,1NF 是对关系模式的起码要求。 例 5 -1 2 考察如图 5.12 所示的信息表,图 5.13 是分解转换后的1NF 形式。 学号 姓名 系别 选修课程 图 5.12 非 1NF 其中的属性“选修课程”是个集合,不符合第一范式的要求,我们可以将此集合转换单个的课程名,如果一个学生选三门课,则需要三个元组表示他所选的课程,这就叫作纵向展开,如图 5.13 所示。 学号 姓名 系别 课程名称 图 5.13 1NF 形式 考察如图 5.14 所示的信息表。 住址 职工姓名 部门 省 市 街道 邮编 图 5.14 非 1NF 其中的属性“住址”具有复合结构,可以横向展开为多个属性,如图 5.15 所示。 职工姓名 部门 省 市 街道 邮编 数据库理论及应用基础 33 图5.15 1NF 形式 5.5.2 第二范式——2NF 1. 问题的引入——关系模式的确定 一般对于一个关系R 而言,除了要确定R 的属性U 之外,还要根据R 的语义确定这个关系模式上的所有函数依赖F,这样一个关系模式就是由三元组R、U 和F 确定的一个整体,可以写为R(U,F)。需要注意的是,这里的表达式仅仅表示一个三元组,并不表示通常“谓词”或者关系。 例 5 -1 3 假设有一个关系SCG,它由属性S#、Sn、Sd、Ss、C#和G,其中 Ss 表示学生所学专业,其他含义同前。这个关系的若干语义如下: z 每个学生属于一个且仅属于一个系与一个专业。 z 每个学生修读的每门课程有且仅有一个成绩。 z 各个系无相同专业。 按照上述语义和其他信息,上述属性之间的函数依赖关系可以表示如下: S#→Sn,S#→Sd,S#→Ss,Ss→Sd(S#,C#)→G 此时有关系模式SCG...