210 likes | 342 Views
第五章 关系数据库设计理论. 5.1 引言. 5.2 函数依赖. 5.3 范式. 5.4 多值依赖和 4NF. 描述一个客观事实的一组数据重复出现在一个关系中,造 成冗余数据,进而使得数据的存储发生异常现象。研究表明, 造成异常现象的原因,问题就出在关系模式的属性组合上。什 么样的关系模式才不会出现数据的异常现象,这就是关系模式 的规范化设计要解决的问题,满足一定规范化程度的关系模式 才是合理需要的关系模式。. 5.1 关系模式的设计问题. 5.1.1 异常问题. 指数据的冗余现象、修改异常、插入异常、删除异常。. 存在异常问题的关系实例.
E N D
第五章 关系数据库设计理论 5.1 引言 5.2 函数依赖 5.3 范式 5.4 多值依赖和4NF
描述一个客观事实的一组数据重复出现在一个关系中,造描述一个客观事实的一组数据重复出现在一个关系中,造 成冗余数据,进而使得数据的存储发生异常现象。研究表明, 造成异常现象的原因,问题就出在关系模式的属性组合上。什 么样的关系模式才不会出现数据的异常现象,这就是关系模式 的规范化设计要解决的问题,满足一定规范化程度的关系模式 才是合理需要的关系模式。 5.1 关系模式的设计问题 5.1.1 异常问题 指数据的冗余现象、修改异常、插入异常、删除异常。
存在异常问题的关系实例 返回
设关系模式 R 有属性集 U , X、Y 是 U 的子集, t、s 是 R 的实例中的任意两个元组,t[X]、t[Y]、 s[X]、s[Y] 分别表示对应元组在属性子集上的取 值, 如果: t[X]=s[X], 有: t[Y]=s[Y], 则称: Y 函数依赖于 X,或 X 函数决定 Y 简记为:X→Y (可用 X→Y 表示没有依赖关系) 例:Book(isbn,title,page,type,price,pressName,authorName) 有:isbn→title isbn→page isbn→type isbn→price isbn→pressName isbn→authorName 元组中的数据之间存在各种数据依赖现象,其中一种是函数 依赖。不同形式的函数依赖将揭示出不同的数据异常现象。 5.2.1 函数依赖的定义 5.2函数依赖
关系 R 的属性集合: A1A2….An → B1B2….Bm A1A2….An 的真子集 T :T → B1B2….Bm 则: A1A2….An 为 R 的键码。 5.2.2 函数依赖和键码 1.超键码 关系 R 有属性集 {A1,A2,….An,B1,B2,….Bm) 如果: A1A2….An → B1B2….Bm 则: A1A2….An 为 R 的超键码。 且: A1A2….AnBi A1A2,….AnBiBj ……………………. A1A2….AnBiBj….Bn 皆为 R 的超键码。 其中:n,m≥1 的整数 , i=0~n , j=0~m , i≠j 2.键码
5.2.3 逻辑蕴含 关系 R 有函数依赖集 F 成立,另一个函数依赖集 T 也成立, 若满足 F 的关系实例也满足 T ,则称 F 蕴含于 T 。 例:R(A,B,C) 有:A→B, B→C , 则:A→C 中 把 A→B, B→C 记为 F , 把 A→C 记为 T 。 5.2.4 函数依赖的推理规则 判断函数依赖的蕴含关系是判断关系模式规范化的基础, 因此,由已知函数依赖集推导其他函数依赖集的推倒规则是判 断关系模式是否规范的重要依据。 分解规则: 把一个 A1A2….An → B1B2….Bm 分解成一组: A1A2….An →B1, A1A2….An →B2,…. ,A1A2….An →Bm 合并规则:把一组函数依赖合并成一个函数依赖。 平凡依赖: A1A2….An → B1B2….Bm 中 B 是 A 的子集。 非平凡依赖:B 不完全在 A 中。 完全非平凡依赖:B 完全不在 A 中。
平凡依赖规则: A1A2….An → B1B2….Bm 与 A1A2….An → C1C2….Cm 等价 其中:C 是 B 的子集,但 C 不在 A 中。 依据上面规则,函数依赖左边有右边的属性时,可删除右边。 以简化函数依赖的形式。 Armstrong公理: 自反律:如果{B1,B2,….,Bm}∈{A1,A2,….,An} , 则 A1A2….An → B1B2….Bm 属平凡依赖。 增长律:如果{B1,B2,….,Bm},任何的C1,C2,….,Ck ,存在 A1A2….An C1C2….Ck→ B1B2….Bm C1C2….Ck 。 传递律: A1A2….An → B1B2….Bm, B1B2….Bm→ C1C2….Ck 则 A1A2….An→ C1C2….Ck
5.2.5 属性集的闭包 判定一个具体的函数依赖是否蕴含于已知函数依赖集的方法。 5.2.6 正则覆盖 在数据库中,对关系的操作必须保证原有函数依赖不变, 这需要DBMS的检测处理,为减少检测开销,应使闭包不 受改变的情况下对函数依赖集进行简化,正则覆盖就是简 化使用的方法。
为消除关系模式 R 中的异常,把 R 中的属性分开, 构成两个新的关系模型。 关系模式的分解 分解的两个准则:1)关系模式分解后原有的信息不丢失。 称为无损连接。 2)分解后保持原有函数依赖仍然成立。 分解 R(A1,A2,….An), 成为:X(B1,B2,….Bm), Y(C1,C2,….,Ck ) 应满足的条件: 1) {A1,A2,….,An} ={B1,B2,….,Bm} ∪{C1,C2,….,Ck } 2)π X(R)={t[B1,B2,….Bm] ∣t∈R}有相同元组。 3)π Y(R)={t[C1,C2,….,Ck ] ∣t∈R}无相同元组。
Book 分解:Book(isbn,title,page,type,price,pressName,author) 为: BookFirst(isbn,title,page,type,price,pressName) BookSecond(isbn,authorName)
BookSecond 返回
关系模式的范式 NF(Normal Form)是衡量关系模式 好坏的一种标准。目前已采用的 NF 标准有如下五个级别: 4NF BCNF 3NF 2NF 1NF 5.3 关系模式的范式 5.3.1 第一范式 1NF 关系 R 中的所有属性取值都是原子性的,称 R 的关系模 式是 1NF 的。这是DBMS对关系模式的最低规范化要求。 属性取值是否是原子的,取决于对事实重要程度的决定。 如: 属性 adress 若不重要,可取值一个大地方名,是原子性的; 若很重要,则取详值:省、市、区、街道、门牌号,这样 取值的属性是非原子性的。
5.3.2 第二范式 2NF 有A1,A2,….,An →B 非平凡依赖存在, {A1,A2,….,An}是关系 R 的键码 ,B是任意非键码,称这样的关系模式是2NF的。 如:Author(ID,name,birthplace,birthday,nowAge) ID→name birthplace birthday nowAge 其中的 birthday→nowAge 表明该关系模式存在传递依 赖,不是 3NF 的。
5.3.3 第三范式 3NF 关系模式的规范化程度并非越高越好,因为高规范化的模式 可能是经多次分解后得到的。为恢复原模式的信息需连接这些模 式,但这种连接可能出现原模式的函数依赖得不到保持的现象。 模式无法达到BCNF要求时,最好使其达到 3NF 条件要求。 有 A1,A2,….,An →B 非平凡依赖存在,{A1,A2,….,An} 或是关系 R 的超键码,或 B 是某个键码的组成部分。这样的关系模式是3NF的。 例:3NF关系模式 bookStore(reader, store, manager) 合理存在的依赖: store → manager , reader manager → store 。模式的键码: {reader, manager}、{store, reader} ;不是{store, manager}或 单个的属性。由此可知 store → manager 是一个BCNF违例。 依这个违例,分解bookStore成:{sotre, manager} {store, reader} 。 但发现再连接后不能保持原函数依赖 reader manager → store 。 为防止这种问题的出现,凡满足3NF的关系模式,不再对其分解。
5.3.4 BC范式 BCNF 有 A1,A2,….,An →B 非平凡依赖存在, {A1,A2,….,An} 是关系 R 必然的超键码, 这样的关系模式是BCNF的。 如:关系 book 和 关系 bookFirst 都存在函数依赖: isbn→title page type price pressName 在 book(isbn, title, page, type, price, pressName, author)中 由于键码是{isbn, author},而函数依赖的左边 isbn 不是超键码, 这就违背了 BCNF 的条件,所以,关系模式book 不是 BCNF 的。 在bookFirst(isbn, title, page, type, price, pressName)中 由于键码是{isbn},而函数依赖的左边 isbn 是超键码,满足 BCNF 的条件,所以,关系模式 bookFirst 是 BCNF 的。
分解成 BCNF 模式的算法 1)找到一个违背 BCNF 条件的非平凡依赖,并在依赖的右边 划入 尽量多的依赖左边的属性。 2)分解原关系模式为属性重叠的两个关系模式,其中一个包含 违例中的所有属性,另一个包含违例中左边和未包含在右边 的所有属性。 3)判断关系模式是否是 BCNF 的,否则,继续分解。 如在关系 book (isbn, title, page, type, price, pressName, author) 中的函数依赖:isbn→title page type price pressName 是一个 BCNF 违例,其右边就包含了由 isbn 决定的所有属性。 把关系模式 book 分解成以下两个关系模式: bookFirst(isbn, title, page, type, price, pressName) bookSecond(isbn,author) 判断这两个分解后的关系模式都是 BCNF 的了。
分解成 BCNF 例: 有关系模式 book(isbn, title, price, press, director, directorAddress) 的函数依赖: isbn→title price press press→director director→directorAddress 由于关系book的键码是 {isbn},所以后两个函数依赖都是 BCNF 违例。现选第一个违例进行分解: 用计算 press→director 的闭包的方法向右边增加尽量多的 属性:{press}﹢={press, director, directorAddress} 根据函数依赖:press→director,directorAddress 分解原模式: {press, director, directorAddress} (1) {isbn, title, price, press} (2) (1)中存在 director→directorAddress 而director 不是超键码,因此 此函数依赖是 关系模式(1)的 BCNF 违例, (1)不是BCNF的。 (2)是 BCNF 的。再对(1)进行分解,最终 book 模式分解为: {isbn, title, price, press} {press, director} {director, directorAddress} . 两个属性的关系模式一定是 BCNF 的。 返回
函数依赖的概念是帮助排除关系中存在冗余数据的元组。即使关系达到 3NF 或 BCNF,数据冗余现象仍可能存在。 多值依赖不排除关系中存在某些元组,而是容许某些元组在关系中出现。 5.4 多值依赖 5.4.1 多值依赖的概念 在author(name, city, street, title)中元组数据重复,但无BCNF违例,因所有四个属性组成关系的唯一键码。 多值依赖: A1,A2,….,An→→ B1,B2,….,Bm 关系的元组在属于A的每个属 性上取特定值,使属于B的属 name →→city street 性取值的集合与既不属于A也不属于B的其它属性的取值的集合无关。
多值依赖的推理规则 平凡依赖规则: 设C=B+Ai i≤n ,D∈B 如果 A1,A2,...,An→→ B1,B2,...,Bm和A1,A2,...,An→→ C1,C2,...,Ck成立, 导致 A1,A2,...,An→→ D1,D2,...,Dr 成立。 传递依赖规则: 如果 A1,A2,...,An→→ B1,B2,...,Bm 和 B1,B2,...,Bm →→ C1,C2,...,Ck 成立, 则 A1,A2,...,An→→ C1,C2,...,Ck 也成立。 复制规则: A1,A2,...,An→ B1,B2,...,Bm 成立, A1,A2,...,An→→ B1,B2,...,Bm 也成立。 互补规则: A1,A2,...,An→→ B1,B2,...,Bm 成立, A1,A2,...,An→→ C1,C2,...,Ck 也成立。 其中,C 不属于A和 B的所有其他属性。
6.4.2 第四范式 4NF 返回 非平凡多值依赖: A1,A2,...,An→→ B1,B2,...,Bm 其中的 B都不在 A中,且R 的所有属性没全部包含在A 和B中。 4NF 将消除BCNF违例和非平凡多值依赖,最终消除多值依赖冗余。 4NF:A1,A2,...,An→→ B1,B2,...,Bm 是非平凡多值依赖,且 {A1,A2,...,An}是超键码(同BCNF),这样的关系属于4NF 关系。 类似BCNF,4NF的分解步骤如下: • 找到一个4NF违例; • 分解该关系模式,一个模式包含A和B中的属性,另一个 • 包含A中的属性以及既不属于A也不属于B的所有其他属性。 name →→city street非平凡 多值依赖是一个 4NF违例。 据此,分解原关系得: {name, city, sreet} {name, title}两个模式。