1 / 21

第五章 关系数据库设计理论

第五章 关系数据库设计理论. 5.1 引言. 5.2 函数依赖. 5.3 范式. 5.4 多值依赖和 4NF. 描述一个客观事实的一组数据重复出现在一个关系中,造 成冗余数据,进而使得数据的存储发生异常现象。研究表明, 造成异常现象的原因,问题就出在关系模式的属性组合上。什 么样的关系模式才不会出现数据的异常现象,这就是关系模式 的规范化设计要解决的问题,满足一定规范化程度的关系模式 才是合理需要的关系模式。. 5.1 关系模式的设计问题. 5.1.1 异常问题. 指数据的冗余现象、修改异常、插入异常、删除异常。. 存在异常问题的关系实例.

abril
Download Presentation

第五章 关系数据库设计理论

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五章 关系数据库设计理论 5.1 引言 5.2 函数依赖 5.3 范式 5.4 多值依赖和4NF

  2. 描述一个客观事实的一组数据重复出现在一个关系中,造描述一个客观事实的一组数据重复出现在一个关系中,造 成冗余数据,进而使得数据的存储发生异常现象。研究表明, 造成异常现象的原因,问题就出在关系模式的属性组合上。什 么样的关系模式才不会出现数据的异常现象,这就是关系模式 的规范化设计要解决的问题,满足一定规范化程度的关系模式 才是合理需要的关系模式。 5.1 关系模式的设计问题 5.1.1 异常问题 指数据的冗余现象、修改异常、插入异常、删除异常。

  3. 存在异常问题的关系实例 返回

  4. 设关系模式 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函数依赖

  5. 关系 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.键码

  6. 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 中。

  7. 平凡依赖规则: 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

  8. 5.2.5 属性集的闭包 判定一个具体的函数依赖是否蕴含于已知函数依赖集的方法。 5.2.6 正则覆盖 在数据库中,对关系的操作必须保证原有函数依赖不变, 这需要DBMS的检测处理,为减少检测开销,应使闭包不 受改变的情况下对函数依赖集进行简化,正则覆盖就是简 化使用的方法。

  9. 为消除关系模式 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}无相同元组。

  10. Book 分解:Book(isbn,title,page,type,price,pressName,author) 为: BookFirst(isbn,title,page,type,price,pressName) BookSecond(isbn,authorName)

  11. BookFirst

  12. BookSecond 返回

  13. 关系模式的范式 NF(Normal Form)是衡量关系模式 好坏的一种标准。目前已采用的 NF 标准有如下五个级别: 4NF BCNF 3NF 2NF 1NF 5.3 关系模式的范式 5.3.1 第一范式 1NF 关系 R 中的所有属性取值都是原子性的,称 R 的关系模 式是 1NF 的。这是DBMS对关系模式的最低规范化要求。 属性取值是否是原子的,取决于对事实重要程度的决定。 如: 属性 adress 若不重要,可取值一个大地方名,是原子性的; 若很重要,则取详值:省、市、区、街道、门牌号,这样 取值的属性是非原子性的。

  14. 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 的。

  15. 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的关系模式,不再对其分解。

  16. 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 的。

  17. 分解成 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 的了。

  18. 分解成 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 的。 返回

  19. 函数依赖的概念是帮助排除关系中存在冗余数据的元组。即使关系达到 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的其它属性的取值的集合无关。

  20. 多值依赖的推理规则 平凡依赖规则: 设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的所有其他属性。

  21. 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}两个模式。

More Related