第八章 关系规范化理论
8.1 关系规范化的作用
1.规范化理论主要包括两方面的内容:
1)数据依赖,是核心,主要研究属性之间的依赖关系
2)范式,是关系模式符合某种级别的标准
8.1 问题的提出
1.关系中可能存在的问题:
1)数据冗余;2)插入异常;3)删除异常;4)更新异常
8.1.2 问题的原因
8.1.3 问题的解决
1.将“不好”的关系模式变成一个“好”的关系模式的方法是利用关系规范化理论,对关系模式进行分解,使每一个关系模式表达的概念单一,属性间的数据依赖关系单纯化,从而消除这些异常
8.2 函数依赖
数据依赖主要包括函数依赖、多值依赖、连接依赖。其中函数依赖是最重要的数据依赖,是规范化的基础。
8.2.1 函数依赖的定义
1.定义:设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于R(U)的任意一个可能的关系r,对于X的每一个具体的值,Y都有唯一的值与之对应,则称X函数确定Y或者Y函数依赖于X,记作X->Y
2.X称为函数依赖的决定因素,Y称为依赖元素
8.2.2 有关函数依赖的几点说明
1.函数依赖是语义范畴的概念,只能根据数据的语义来确定函数依赖是否成立
2.函数依赖关系的存在与时间无关
3.函数依赖与属性之间的联系类型有关
8.2.3 函数依赖的分类
1.非平凡的函数依赖
当X->Y,但Y⊄X时,称X->Y是非平凡的函数依赖
2.平凡的函数依赖
当X->Y,但Y ⊆ X时,称X->Y是平凡的函数依赖
3.完全函数依赖
在一个关系中,若某个非主属性数据项依赖于全部关键字称之为完全函数依赖。
4.部分函数依赖
如果X->Y,并且存在X的一个真子集X’,使得X’->Y成立,则称Y部分函数依赖于X
5.传递函数依赖
在关系模式R (U) 中, 如果X→Y, Y→Z, Z不是Y的子集, Y不函数决定X, 则称Z对X传递函数依赖
8.2.4 函数依赖的推理规则
8.3 候选码和最小(极小)函数依赖集
8.3.1 候选码
1.定义:设K是R(U)中的属性或属性的组合,若K——>(F)U,则K为R的候选码
2.如果U部分函数依赖于K,则称K为超码
8.3.2 极小(最小)函数依赖集
1.定义:如果函数依赖集F满足下列条件,那么称F是一个极小(或最小)函数依赖集
(1)F中每个函数依赖的右边仅有一个属性
(2)F中不存在这样的函数依赖X->Y,使得F与F-{X->Y}等价
(3)F中不存在这样的函数依赖X->Y,X有真子集X’,使得F-{X->Y}∪{X’->Y}与F等价
极小(或最小)函数依赖集的算法实现过程如下:
(1)对于F中每个函数依赖X->Y,若Y=Y1,Y2,…,Yn,则通过B2分解性规则,用X->Yi(i=1,2,3……n)取代X->Y
(2)从F中删除传递依赖的结果,保留传递依赖的过程
(3)从F中删除部分依赖
步骤:
(1)每个函数依赖写成右边是单属性的形式
(2)删除传递依赖
(3)删除部分依赖(化简公式-->等价,去掉冗余)
2.(缺图)
8.4 关系的规范化
8.4.1 范式及规范化
1.通常把一个关系模式R符合第n范式的标准要求记为R∈nNF。
2.各范式之间的关系:5NF ⊂ 4NF ⊂ BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF
3.需要将有异常且符合低级别范式的关系模式通过模式分解的方法转换为若干个符合高一级别范式的关系模式的集合,以消除异常
4.所谓规范化实质上就是概念的单一化
8.4.2 第一范式
1.定义:如果关系模式R中的每个属性值都是不可分的原子值,那么称R属于第一范式,记作R∈1NF
8.4.3 第二范式
1.定义:如果关系模式R∈1NF,且每个非主属性都完全函数依赖于R的任一候选码,那么R∈2NF
8.4.4 第三范式
1.定义:如果关系模式R∈2NF,且每个非主属性都不传递依赖于R的任一候选码,那么R∈3NF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律