4.8学习总结
数据库原理第六章 关系数据库规范化理论
6.1函数依赖
Re:关系模式
五元组:R(U, D, DOM, F)
R:关系名
U:组成该关系的属性名集合
D:属性组U中属性所来自的域
DOM:属性向域的映象集合
F:属性间数据的依赖关系集合
简化为一个三元组R(U, F)
当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系。
6.1.1函数依赖基本概念
6.1.2术语和符号
1. 如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。
2. 如果X→Y,但Y包含于X,则称X→Y是平凡的函数依赖。 如不作特别说明,我们总是讨论非平凡函数依赖。
3. 如果Y不函数依赖于X,则记作X→Y。
4. 如果X→Y,则称X为决定因子。
5. 如果X→Y,并且Y→X,则记作X←→Y。
6. 如果X→Y,并且对于X的一个任意真子集X’ 都有 X’ →Y,则称Y完全函数依赖于X,
记作:
如果X’→Y成立,则称Y部分函数依赖于X,记作:
7.如果X→Y(Y→X)、Y→Z,则称Z传递函数依赖于X。 记作:
6.1.3为什么要讨论函数依赖
存在的问题:
1. 数据冗余太大
2. 更新问题(Update Anomalies)
3. 插入异常(Insertion Anomalies)
4. 删除异常(Deletion Anomalies)
结论 R(U, F) :U={Sno, Sdept, Mname, Cname, Grade}不是一个好的模式。 “好”的模式: 不会发生插入异常、删除异常、更新异常, 数据冗余应尽可能少。
6.2 关系规范化
码:
Re: 实体—联系模型:唯一标识实体的属性集称为码。 关系模式:码是表中的某个属性组,它可以唯一确定一个元组。
候选码:设K为R (U,F)中的属性或属性组,若存在K→U,则K为R的候选码。(K为决定R全部属性值的最小属性组)。
主码:关系R (U,F)中可能有多个候选码,则选其中一个作为主码。
全码:候选码为整个属性组。
主属性与非主属性: 在R (U,F)中,包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性。
外码:用于关系表之间建立关联的属性(组)。 定义:若R(U,F)的属性(组)X(X U)是另一个关系S的码,则称X为R的外码。
范式:关系模式满足不同标准化程度称为满足不同范式。
1971-1972年E.F.Codd系统提出了1NF、2NF、3NF。后来又和他人一起提出了BCNF、4NF、5NF。 范式的种类: 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF)
各种范式之间存在联系: 某一关系模式R为第n范式,可简记为R∈nNF。 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
第一范式:1NF:
1NF的定义 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。 但是满足第一范式的关系模式并不一定是一个好的关系模式。
第二范式:2NF:
2NF的定义 定义:若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。 S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈1NF S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈2NF ? 答案:S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈2NF ! 原因:存在部分依赖 (Sno, Cno) P Sdept, (Sno, Cno) P Sloc。
解决办法:采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
分解办法:首先,对于组成主码的属性集合的每一个子集,用它作为主码构成一个表。 然后,将依赖于这些主码的属性放置到相应的表中。 最后,去掉只由主码的子集构成的表。
第三范式 :3NF:
3NF的定义 定义:关系模式R<U,F> 中每一个非主属性既不部分依赖于码也不传递依赖于码,则称R<U,F> ∈ 3NF。 或:R ∈ 2NF且非主属性不传递函数依赖于码。
解决方法:采用投影分解法,把S-L分解为两个关系模式,以消除传递依赖。 分解过程 (1)对于不是候选码的每个决定因子,从表中删去依赖于它的所有属性; (2)新建一个表,新表中包含在原表中所有依赖于该决定因子的属性; (3)将决定因子作为新表的主码。
规范化的过程就是把规范化程度低的关系模式分解为若干个规范化程度高的关系模式。目的就是使每个规范化的关系模式只描述一个主题。根本目的是减少数据冗余、消除操作异常。 因此,规范化程度越高,数据冗余越少,操作异常越少。 对于一般的数据库应用来说,3NF就足够了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!