Home 数据库学习五 范式
Post
Cancel

数据库学习五 范式

关系数据库中的关系必须满足一定的规范化要求,对于不同的规范化程度可以使用范式来衡量。目前主要有 6 钟范式:1NF、2NF、3NF、BCNF、4NF 和 5NF

满足最低要求的称为 1NF,在 1NF 基础上进一步满足一些要求的为 2NF,以此类推。在这些范式中,最重要的是 3NF 和 BCNF,它们是进行规范化的主要目标

一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程称为规范化

第一范式 (1NF)

定义:设 R 是一个关系模式,R 属于第一范式当且仅当 R 中每一个属性 A 的值域只包含原子项,即不可分割的数据项

1NF 不能排除数据冗余、更新 (插入、删除) 异常和修改复杂等问题,因为其中可能存在部分函数依赖

第二范式 (2NF)

定义:设 R 是一个关系模式,R 属于第二范式当且仅当 R 是 1NF,且每个非主属性都完全依赖于候选码

属于 2NF 的关系模式 R 也可能存在数据冗余和更新异常等问题,因为其中可能存在传递函数依赖

第三范式 (3NF)

定义:设 R 是一个关系模式,R 属于第三范式当且仅当 R 是 2NF,且每个非主属性都非传递依赖于候选码

属于 3NF 的关系模式 R 可能存在主属性对码的部分依赖和传递依赖

BC 范式 (BCNF)

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

由 BCNF 的定义可以得到结论,一个满足 BCNF 的关系模式有:

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有的主属性对每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性

一个满足 BCNF 的关系模式 R 已消除了插入和删除异常

只有两个属性的关系模式一定是 BCNF

第四范式 (4NF)

定义:设有一关系模式 R<U, F> 是 1NF,如果对于 R 的每个非平凡多值依赖 X →→ Y (Y ⊈ X),X 都包含了 R 的一个候选码,则称 R 是第四范式

  • 多值依赖

给定的关系模式 R<U, F>,有 X、Y、Z 是 U 的子集,并且 Z = U - X - Y,关系模式 R 中的多值依赖 X →→ Y 成立,当且仅当对 R 的任一关系 r,给定一对 (x, z) 值,有一组 Y 的值,这组值仅仅决定于 x 值而与 z 值无关

  • 平凡的多值依赖

若以上多值依赖的定义中有 X →→ Y 成立,而且 Z 为空集,则称 X →→ Y 为平凡的多值依赖

范式总结

  • 1NF(第一范式)

所有字段值都是不可分解的原子值

  • 2NF(第二范式)

不包含非主属性对码的部分函数依赖,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中

  • 3NF(第三范式)

不包含非主属性对码的传递函数依赖,确保数据表中每一列数据都和主键直接相关,而不能间接相关

  • BCNF(BC范式)

消除每一属性对候选键的传递依赖,BCNF是修正的3NF


1NF → 2NF:消除非主属性对码的部分函数依赖

2NF → 3NF:消除非主属性对码的传递函数依赖

3NF → BCNF:消除主属性对码的部分和传递函数依赖

BCNF → 4NF:消除非平凡且非函数依赖的多值依赖

候选码都是单个属性至少是 2NF

关系模式的分解

对存在数据冗余、插入异常、删除异常问题的关系模式,应采取一个关系模式分解为多个关系模式的方法进行处理,相应地,原来存储在一个二维表内的数据就要分散到多个二维表中,要使这个分解有意义,起码的要求是后者不能丢失前者的信息

在分解处理中会涉及一些新问题,为使分解后的模式保持原模式所满足的特性,其基本要求是模式分解具有无损连接性和保持函数依赖性

无损连接

无损连接指的是对关系模式分解时,原关系模式下任一合法的关系实例在分解之后应能通过自然连接运算恢复起来

即分解后的关系通过自然连接可以恢复为原关系

保持函数依赖

做模式分解后的 F’ (各个子模式函数依赖的并集) 是否与 F (原有的函数依赖集) 等价,F’ 包含所有的 F 中的函数依赖则可以得出保持函数的依赖性 (充分条件)

即分解后依赖不变


参考:模式分解保持函数依赖判断——数据库考试复习_guoyp2126的博客-CSDN博客


已知 R (ABCDEGH), F={A->D, E->D, D->B, BC->D,DC->A}, 求保存函数依赖的 3NF 的分解

1)求出最小函数依赖集 2)把不在F里面的属性都找出来,单独分一类 3)把每一个依赖左边相同的分成一类,没有一样的,那么就把A->D改为{AD}, 如果一样{A->B,A->C}那么就改为{ABC} 4)如果候选码没出现在分离里面,把任意一个候选码作为一类

最先函数依赖集Fmin={A->D, E->D, D->B, BC->D, DC->A} GH没在F里面,单独一类{GH} 候选码:CE AE

{AD}{ED}{DB}{BCD}{DCA}{CE}{GH}

This post is licensed under CC BY 4.0 by the author.

数据库学习四 关系数据库理论

数据库学习六 数据库设计