小白学数据库 (七)关系数据库规范化

一、为什么要关系模式规范化?

  1. 数据冗余大
  2. 插入异常
  3. 删除异常
  4. 更新异常(修改困难,容易造成数据的不一致性)

二 、函数依赖定义

如果有关系模式R(A1,A2, ……,An), X和Y为{A1,A2,……An}的子集,则对于关系R中的任意一个X值,都只有一个Y值与之对应,则称X函数决定Y,或Y函数依赖于V.
例:

对学生关系模式  Student (sid,sname,age)
有以下依赖:
sid →sname, sid —→age

三、关系规范化

候选码:设K为R(U,F)中的属性或属性组,若K完全决定U,则K为R的候选码
主码:关系R(U,F)中可能有多个候选码,则选其中一个座位主码
全码:候选码为整个属性组
包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性
例:学生(学号,姓名,性别,身份证号,年龄,所在系)

  • 候选码:学号,身份证号
  • 主码:学号 或 身份证号
  • 主属性:学号,身份证号
  • 非主属性:姓名,性别,年龄,所在系
    外码外码:用于关系表之间建立关联的属性(组)

四、范式

范式:关系数据库中的关系要满足一定的要求,满足不同程度要求的为不同的范式(Normal Form)
范式的种类

  • 第一范式(1NF)
  • 第二范式(2NF)
  • 第三范式(3NF)
    第一范式:不包含重复组的关系,关系的每个分量必须是不可再分的数据项
    说明:
  • 属性不可再分(不允许出现嵌套的属性定义)
  • 属性下的值不可再分(不允许出现多个值)
    在这里插入图片描述
    第二范式
    如果R(U,F)∈1NF,并且R中的每个非主属性都完全函数依赖于主码,则R(U,F)∈2NF
    例:S-L-C(sid,sdept,sloc,cid,grade)
    仅属于2NF的关系模式可能会产生的问题:
  • 数据冗余
  • 插入异常
  • 删除异常
  • 修改困难
    第三范式:如果R(U,F)∈2NF,并且所有非主属性都不传递依赖于主码,则R(U,F)∈3NF

五、Boyce-Codd范式

定义:若R∈1NF,且对任何非平凡的函数依赖X→Y,X必包含码,则R∈BCNF
若R∈1NF,并且R中不存在任何属性传递函数依赖于R的某个值,则称R∈BCNF
若R∈BCNF,则R∈3NF(若R∈1NF,并且R中不存在任何非主属性传递函数依赖于R的某个码,则称R∈3NF)
从完全函数依赖的观点看,属于BCNF的关系模式满足:

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

六、范式小结

1.规范化的目的
解决:数据冗余、插入异常、删除异常、修改困难等问题
2.规范化的基本思想
逐步消除不合适的数据依赖,让一个关系描述一个概念、一个实体或实体间的一种联系

Armstrong公理系统

1.逻辑蕴涵
设F是关系模式R<U,F>的函数依赖集,X、Y是R的属性子集。如果在R<U,F>上函数依赖X→Y成立,则称F逻辑蕴涵X→Y
2.Armstrong公理
对关系模式R<U,F>,有以下的推理规则:
自反律:若Y⊆X⊆ U,则 X→Y为F所蕴涵(若Y⊆ X,则X→Y)
增广律:若X→Y为F所 蕴涵,且Z⊆ U,则XZ→YZ为F所蕴涵(若X→Y,则XZ→YZ)
传递律:若X→Y和Y→Z为F所蕴涵,则X→Z为F所蕴涵 (若X→Y、Y→Z,则X→Z)
3.Armstrong公理的推论
(一)合并规则:由X→Y,X→Z,有X→YZ
(二)分解规则:由X→Y及Z⊆ Y,有X→Z
(三)伪传递规则:由X→Y,WY→Z,有XW→Z
4.函数依赖集的闭包
闭包:在关系模式R<U,F>中F所逻辑蕴涵的函数,依赖的全体称为F的闭包,记做:F+
属性集的闭包:设关系模式R<U,F>,X⊆ U,X关于函数依赖集F的闭包为:X+F

函数依赖集的闭包是一个(更大的)函数依赖集
属性集的闭包是一个(更大的)属性集合

5.求闭包X+F的算法:

Armdtrong公理
若Y⊆ X,则X→Y
若X→Y,则XZ→YZ
若X→Y、Y→Z,则X→Z

算法:

输入: X,U,F
输出:X关于F的闭包
(一)初始:令X(0)=X,i=0;
(二)迭代:求B={A|(∃V)(∃W)(V→W∈FV⊆X(I)^^A∈W)};X(i+1)=B∪X(i)
(三)判断:X(i+1)=X(i)?
若相等或X(i)=U,转一下步
否则,用i+1取代i,转第(二)步继续迭代;
(四)结束:X(i)就是F+F

每次迭代都添加属性到当前闭包(不增加时算法就结束)故至多迭代|U|-|X|次算法终止

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值