第6章:关系数据库理论(考研重点)

第6章:关系数据库理论(考研重点)

代码是基于SQLServer学习,与MySQL有略微差别!
考研复试或者考研科目中可能会考!

6.1、问题的提出

举例:

  • 我们要开发一个教务管理系统,信息有:学号,姓名,课号,课名,成绩。
  • 首先应该设计数据库来存储信息。
  • 针对这个具体系统,应该如何构造一个适合于它的数据库模式,即应该构造几个关系模式,每个关系模式由哪些属性组成等——关系数据库逻辑设计问题

设计一个数据库,只有一个关系模式:

  • SC(SNO, SNAME, CNO, CNAME, G)
    • 主码:(SNO,CNO)
  • 存在问题:
    • 冗余度大;e.g:每次插入重复sname、cname
    • 更新异常;e.g:修改课名时,只修改了一个
    • 插入异常;e.g:新添加一个学生,但是没有选课,cno为null;或者新加一门课,但没有学生选,sno为null
    • 删除异常;e.g:删除一名学生的时候,连带着课程也一起跟着删除,可能会导致该课程的缺失

一个好的关系数据库模式应该具备以下四个条件:

  1. 尽可能少的数据冗余。
  2. 没有插入异常。
  3. 没有删除异常。
  4. 没有更新异常。

问题的解决方案:

  • 对关系模式
    SC(SNO,SNAME,CNO,CNAME,G)
    进行分解;分为下面三个关系模式
    • S( SNO, SNAM );
    • C( CNO, CNAME );
    • SC( SNO, CNO, G )

这样是否能解决问题?理论基础是什么?

答:能,关系的规范化理论

6.2、规范化

6.2.1、关系的规范化概述

  • 将结构复杂的关系模式分解成结构简单的关系模式,从而把不好的关系数据库模式转变为好的关系数据库模式,这就是关系的规范化。

  • 指导关系的规范化有一套完整的理论,称为关系规范化理论。

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

关系模式可以形式化的表示为
R(U, D, dom, F)

字母 含义
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域的集合
dom 属性向域的映像集合
F 属性间数据依赖的集合

在本章中关系模式简记为R(U, F)

6.2.2、数据依赖

数据依赖:关系模式中的各属性之间相互依赖、相互制约的联系
数据依赖是语义的体现

模式分解的目的就是消除不好的函数依赖(部分函数依赖、传递函数依赖)

建立一数据库来存储教务有关信息:

  • 学号:Sno、院系名:Sdept、系主任:Mname、课程号:Cno、课程名:Cname、成绩:Grade
  • 单一的关系模式 : S(U, F)
    U ={Sno, Sdept, Mname, Cno, Cname, Grade}
    F是什么?
U={ Sno,Sdept,Mname,Cno,Cname,Grade }
数据库的语义: 
一个学生只属于一个系,一个系有若干学生;
Sdept = f(Sno) (Sno --> Sdept)
一个系只有一名系主任;
Sdept --> Mname
一个学生可以选修多门课程, 每门课程有若干学生选修;每个学生所学的每门课程都有一个成绩。
(Sno, Cno) --> Grade
F={ Sno-->Sdept, Sdept-->Mname,(Sno, Cno)-->Grade }

数据依赖一般分为

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

其中,函数依赖是最重要的数据依赖。

6.2.3、函数依赖

定义设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系 r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X → Y

Y函数依赖于X 等价于下面:

  • 只要X相等Y就相等
  • 只要Y不相等, X就不相等

对于关系模式:SCD{ SNO,SN,AGE,DEPT,MN,CNO,SCORE }

  • SNO → SN
  • SNO → AGE
  • SN → AGE:学生有重名的情况下,age 不函数依赖与 sn
  • SNO →DEPT
  • DEPT → MN
  • SNO → MN
  • SNO → SCORE:学生可能有多门课的成绩,因此 score 不函数依赖于 sno
  • (SNO,CNO) → SCORE

几个术语和记号

  • 决定因素、依赖因素

    若X→Y,我们称X为决定因素,Y为依赖因素。

  • X←→Y

    若X→Y,Y→X,则记作X←→Y

  • X ↛ Y

    若Y不函数依赖X,则记作X ↛ Y

函数依赖的几点说明

1、函数依赖是语义的体现,我们只能根据语义来确定一个函数依赖。

对于关系模式:SC{SNO, SN, AGE, CNO, SCORE}

  • 语义1:学生可以重名 SN ↛ AGE
  • 语义2:学生不可以重名 SN → AGE
  • 语义3:一名学生可以选多门课: SNO ↛ CNO
  • 语义4:一名学生只可以选一门课:SNO → CNO

2、平凡的函数依赖与非平凡的函数依赖。

当属性集Y是属性集X的子集时,则必然存在着函数依赖X→Y,这种类型的函数依赖称为平凡的函数依赖。

  • (Sno, Sage) → Sno
  • (Sno, Sage) → Sage
  • (Sno, Sage) → (Sno, Sage)

如果Y不是X的子集,则称X→Y为非平凡的函数依赖。

对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声

明, 我们总是讨论非平凡函数依赖。

3、函数依赖与属性之间的联系类型有关。

在一个关系模式中,如果属性X与Y有1:1联系时, 则存在函数依赖X→Y, Y→X, 即X←→Y。

  • 当学生无重名时,SNO与SN有1:1联系, SNO ←→ SN

在一个关系模式中,如果属性Y与X有1:m的联系时,则存在函数依赖X→Y。

  • AGE与SNO之间1:m联系,所以有SNO→AGE。

所以在确定属性间的函数依赖关系时,可以从分析属性间的联系类型入手,便可确定属

性间的函数依赖。

函数依赖的基本性质

1、传递性

  • 若X→Y,Y→Z ,则有X→Z
  • 证明:任意两个元组u, v, 假设其X部分相等。
    两个元组u, v的X部分相等,则有Y部分相等(因为X→Y),那么Z部分也肯定相等(因为Y→Z )。
    所以X→Z 。

2、扩张性

  • 若X→Y且W→Z,则(X,W)→(Y,Z)。
  • 例如,对关系模式
    SC(SNO,SNAME,AGE, CNO,CNAME,G)
    有SNO→(SNAME,AGE),CNO→CNAME
    则有(SNO,CNO)→(SNAME,AGE,CNAME)

3、合并性

  • 若X→Y且X→Z则必有X→(Y,Z)。

  • 例如,对于关系模式
    SCD{SNO,SN,AGE,DEPT,MN,CNO,CORE}
    SNO→(SN,AGE),SNO→(DEPT,MN),
    则有SNO→(SN, AGE, DEPT, MN)。

4、分解性

  • 若X→(Y,Z),则X→Y且X→Z。
  • 分解性为合并性的逆过程。

完全函数依赖、部分函数依赖、传递函数依赖

(重点)定义

  • 在关系模式R(U)中,如果X → Y,并且对于X的任何一个真子集X’,都有X’↛ Y, 则称 Y完全函数依赖于X,记作X→Y。

  • 在关系模式R(U)中,若X → Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X→Y。
    例如,对关系模式:SC(SNO,SNAME,AGE, CNO,CNAME,GRADE)

    • (SNO,CNO) →F GRADE
    • (SNO,CNO) →P AGE
  • 在关系模式R(U)中&#x

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值