thunder_sword's blog thunder_sword's blog
来看漫画丫~
首页
分类
标签
归档
GitHub

thunder-sword

网安界的小菜鸡
来看漫画丫~
首页
分类
标签
归档
GitHub
  • 1数据库系统概述

  • 2数据模型

  • 3数据库系统结构

  • sql语法标准

  • 关系数据库基础

  • 数据库安全

  • 数据库设计

  • 设计与应用开发篇

    • 1-2关系规范化过程
      • 1.关系模式
      • 2.关系数据库
      • 3.关系数据库的模式
      • 0.总览
      • 1.关系模式的形式化定义
      • 2.数据依赖
      • 3.分解关系模式
      • 0.总览
      • 1.函数依赖
        • (1)平凡函数依赖与非平凡函数依赖
        • (2)完全函数依赖与部分函数依赖
        • (3)传递函数依赖
      • 2.码
        • (1)主属性与非主属性
        • (2)全码
        • (3)外部码(外码)
      • 0.总览与范式之间的关系
      • 1.第一范式1NF
        • (1)定义:
        • (2)问题:
      • 2.第二范式2NF
        • (1)定义:
        • (2)问题:
        • (3)改进:
      • 3.第三范式3NF
        • (1)定义:
        • (2)问题:
        • (3)改进:
      • 4.BC范式(BCNF)
        • (1)定义:
        • (2)性质:
        • (3)改进:
      • 5.小结
      • 6.多值依赖
        • 数据冗余例子:
        • 多值依赖定义:
        • 性质:
        • 多值依赖与函数依赖的区别:
      • 7.第四范式4NF
        • (1)定义:
      • 8.规范化小结
    • 3数据依赖的公理系统
    • 4模式的分解
  • 数据库
  • 设计与应用开发篇
thunder-sword
2021-06-13

1-2关系规范化过程

# 设计与应用开发篇

# 0x0.概念回顾

# 1.关系模式

image-20210421105559808

# 2.关系数据库

在一个给定的应用领域中,所有关系的集合构成一个关系数据库

# 3.关系数据库的模式

image-20210421105641653

# 0x1.问题的提出

# 0.总览

关系数据库逻辑设计:

  • 针对具体问题,如何构造一个适合于它的数据模式
  • 数据库逻辑设计的工具──关系数据库的规范化理论

image-20210421105422876

# 1.关系模式的形式化定义

image-20210421105820106

# 2.数据依赖

image-20210421105838185image-20210421105847561

(3)数据依赖的类型:

  • 函数依赖(Functional Dependency,简记为FD)
  • 多值依赖(Multivalued Dependency,简记为MVD)
  • 其他

(4)关系模式的简化表示

关系模式R(U, D, DOM, F)可简化为一个三元组:

​ R(U, F)

当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系

例子:

image-20210421110135506image-20210421110146514

关系模式Student<U, F>中存在的问题:

image-20210421110215154

结论:

image-20210421110228281

# 3.分解关系模式

所以有了一个解决方法:

image-20210421110248465

# 0x2.规范化

规范化理论正是用来指导改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

# 0.总览

image-20210421110544893

# 1.函数依赖

定义:

image-20210421110838729

# (1)平凡函数依赖与非平凡函数依赖

image-20210421110924728

性质:

  • 若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)
  • 若X→Y,Y→X,则记作X←→Y。
  • 若Y不函数依赖于X,则记作image-20210421111055705。

# (2)完全函数依赖与部分函数依赖

image-20210421111138574

  • 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’不推出Y, 则称Y对X完全函数依赖,记作 X F Y。
  • 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X P Y

例子:

image-20210421111151645

# (3)传递函数依赖

注意:其中的Z直接依赖于X所存在的条件如下:

(X←→Y)→Z,且Y⊈X

image-20210421111353662

# 2.码

image-20210421111706078

# (1)主属性与非主属性

  • 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
  • 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)

# (2)全码

  • 整个属性组是码,称为全码(All-key) ,即这个码覆盖了所有属性
  • 如果一个码是全码,那么只有一个候选码

例子:

image-20210421112243615

# (3)外部码(外码)

image-20210421112646164

# 0x3.范式

范式是对关系模式好坏的一个测度 我们需要把现实中杂乱的各种联系先形式化,然后极小化 根据极小化后的函数依赖集合,对关系模式进行分离 分离的程度及好坏又需要用范式去测量 分离有相应的算法 之后还可以考虑数据冗余的问题(多值依赖、4NF)

# 0.总览与范式之间的关系

image-20210421112709183

各种范式之间存在联系:

image-20210421113732804

image-20210428113617338

# 1.第一范式1NF

老师说:所出的题一定满足第一范式,也就是说,只要是一个关系就满足第一范式。

# (1)定义:

image-20210421115225158

# (2)问题:

而第一范式可能会有S-L-C类型关系模型,从而产生问题,用第二范式减轻。

# 2.第二范式2NF

# (1)定义:

即没有非主属性部分函数依赖于码。

image-20210421115926105

ps:上述提到属性:学号(Sno),所在系(Sdept),系主任姓名(Mname)、课程号(Cno)、成绩(Grade)、学生宿舍楼号(Sloc)。

# (2)问题:

可能会有S-L类型关系模型,从而产生一些不便,用第三范式减轻。

# (3)改进:

可减轻S-L-C类型关系模型产生的错误。

修改1NF关系模式产生问题的例子:

image-20210421125623086

相应的函数依赖图示如下:

image-20210421132103888

因此就会产生一系列问题:

  • 插入异常 (没选课的学生)
  • 删除异常 (删除只选一门课的学生)
  • 数据冗余度大 (k门课,Sdept Sloc重复存储k次)
  • 修改复杂 (转系,本应只修改Sdept却还需修改Sloc)

因此S-L-C不是一个好的关系模式

原因:

Sdept、 Sloc部分函数依赖于码。

解决方法:

S-L-C分解为两个关系模式,以消除这些部分函数依赖 SC(Sno, Cno, Grade) S-L(Sno, Sdept, Sloc)

从而产生的函数依赖图:

image-20210421132355412

因此采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

但是将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

# 3.第三范式3NF

# (1)定义:

image-20210421115510705

# (2)问题:

可能存在主属性对码的部分依赖和传递依赖

# (3)改进:

减轻了S-L类型关系模型数据操作时的错误。

修改2NF关系模式产生问题的例子:

image-20210421115612707

image-20210421115624581

如果有如下操作:

  • 插入还没住处的人
  • 修改系名要更新所有记录

就会产生各种问题

解决方法:

image-20210421115744220

采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

# 4.BC范式(BCNF)

全码必定满足bc范式。

# (1)定义:

image-20210421120117350

# (2)性质:

image-20210421133254324

# (3)改进:

修改3NF关系模式产生问题的例子:

image-20210421133651594

image-20210421133658870

image-20210421133708934

存在问题:

image-20210421133728003

解决方法:

image-20210421133741865

# 5.小结

image-20210421133841682

  • 一个数据库模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离;已经消除插入和删除异常。

    但是,我们还应当适度解决冗余问题;

  • 当一个关系U属于第3范式时,且只有一个候选码,那么它也属于BC范式。

# 6.多值依赖

# 数据冗余例子:

[例6.9] 学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。

而对应的关系为:

  • 非规范化关系

    image-20210428105557191

  • 用二维表表示Teaching

    image-20210428105616104

Teaching具有唯一候选码(C,T,B), 即全码。(这个例子中,C为X,T为Y,B为Z)

因此Teaching∈BCNF

Teaching模式中存在的问题 (1) 数据冗余度大 (2) 插入操作复杂 (3) 删除操作复杂 (4) 修改操作复杂

# 多值依赖定义:

设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖 X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一==组==Y的值,这组值仅仅决定于x值而与z值无关(意思是只有z值没办法唯一确定y)

多值依赖的另一个等价的形式化的定义:

在R(U)的任一关系r中,如果存在元组t,s 使得t[X]=s[X],那么就必然存在元组 w,v∈r,(w,v可以与s,t相同),使得w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两个新元组必在r中),则Y多值依赖于X,记为X→→Y。 这里,X,Y是U的子集,Z=U-X-Y。

判定方法:对于任意关系中,如果存在两个元组(就是行),记为A,B,如果他们的某一属性X的值相等,那么我们交换它们另外的属性Y的值后,得到的新的两个元组,在表中是可以在原来的表中找到与它们相匹配的元组的。

例如:

在关系模式Teaching中,对于一个(物理,光学原理)有一组T值{李勇,王军},这组值仅仅决定于课程C上的值(物理)。也就是说对于另一个(物理,普通物理学)它对应的一组T值仍是{李勇,王军},尽管这时参考书B的值已经改变了。因此T多值依赖于C,即C→→T。

平凡多值依赖和非平凡的多值依赖:

  • 若X→→Y,而Z=Φ,则称 X→→Y为平凡的多值依赖
  • 否则称X→→Y为非平凡的多值依赖

# 性质:

  1. 对称性

    若X→→Y,则X→→Z,其中Z=U-X-Y

  2. 传递性

    若X→→Y,Y→→Z, 则X→→Z –Y

  3. 函数依赖是多值依赖的特殊情况。

    若X→Y,则X→→Y。

  4. 若X→→Y,X→→Z,则X→→Y∪ Z。

  5. 若X→→Y,X→→Z,则X→→Y∩Z。

  6. 若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。

# 多值依赖与函数依赖的区别:

(1) 多值依赖的有效性与属性集的范围有关(Z) (2) 若函数依赖X→Y在R(U)上成立,则对于任何Y'⊆Y均有X→Y' 成立 多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y' ⊆ Y有X→→Y' 成立

# 7.第四范式4NF

# (1)定义:

关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈X),X都含有码,则R∈4NF。 (唯一性)

如果R ∈ 4NF, 则R ∈ [BCNF]

  • 不允许有非平凡且非函数依赖的多值依赖
  • 允许的非平凡多值依赖是函数依赖

例子:

image-20210428113409486

# 8.规范化小结

关系数据库的规范化理论是数据库逻辑设计的工具

目的:尽量消除插入、删除异常,修改复杂,数据冗余(因为解决数据冗余可能会带来后期查询效率的降低)

基本思想:逐步消除数据依赖中不合适的部分

  • 实质:概念的单一化
  • 让一个关系描述一个概念、一个实体、实体间的一种联系

关系模式规范化的基本步骤:

image-20210428113617338

规范化的缺点:

  • 不能说规范化程度越高的关系模式就越好
  • 在设计数据库模式结构时,必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式
  • 上面的规范化步骤可以在其中任何一步终止
  • 原因:连接问题会带来更大的查询代价
  • 比如这个例子:Teaching(C,T,B)=CT(C, T) ∈ 4NF; CB(C, B) ∈ 4NF
数据库设计
3数据依赖的公理系统

← 数据库设计 3数据依赖的公理系统→

最近更新
01
计算机系统的硬件结构
10-12
02
计算机系统概论
10-12
03
进程
10-12
更多文章>
Theme by Vdoing | Copyright © 2019-2021 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×