当前位置: 首页 > article >正文

【数据库】关系数据理论--规范化

1.问题的提出

关系模式由五部分组成,是一个五元组: R(U, D, DOM, F)
(1)关系名R是符号化的元组语义
(2)U为一组属性
(3)D为属性组U中的属性所来自的域
(4)DOM为属性到域的映射
(5)F为属性组U上的一组数据依赖
由于D、DOM与模式设计关系不大,因此在本章中把关系模式看作一个三元组:R<U,V>
当且仅当U上的一个关系r满足F时,r称为关系模式R<U,V>的一个关系。
关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
在这里插入图片描述

数据依赖的主要类型:
函数依赖(Functional Dependency,简记为FD)
多值依赖(Multi-Valued Dependency,简记为MVD)–不考
数据依赖:是一个关系内部属性与属性之间的一种约束关系,通过属性间值的相等与否体现出来的数据间相互联系。
在这里插入图片描述
例题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关系模式Student<U, F>中存在的问题
(1)数据冗余
浪费大量的存储空间
每一个系主任的姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。50个学生需要?
(2)更新异常(Update Anomalies)
数据冗余 ,更新数据时,维护数据完整性代价大。
某系更换系主任后,必须修改与该系学生有关的每一个元组。
(3)插入异常(Insertion Anomalies)
如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。(学生是主码)
(4)删除异常(Deletion Anomalies)
如果某个系的学生全部毕业了, 则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。

🌟原因:由存在于模式中的某些数据依赖引起的。
🌟解决方法:用规范化理论改造关系模式来消除其中不合适的数据依赖
把这个单一的模式分成三个关系模式
S(Sno,Sdept, Sno → Sdept);
SC(Sno,Cno,Grade, (Sno,Cno) → Grade);
DEPT(Sdept,Mname, Sdept → Mname);
这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。
这个过程称为规范化,解决异常、冗余的问题,对于应用程序,不是绝对的需求。

2.规范化(必考)
2.1函数依赖

//定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。(X不能出现重复,若重复,则不存在函数依赖)
理解:随便指定一个x,就能唯一确定一个y,没有多个y
在这里插入图片描述
函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。

X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。–(不考)
(学号,姓名,年龄)→( 学号,年龄)–平凡函数依赖
(学号,发型)→( 发型)–平凡函数依赖
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。若不特别声明, 我们总是讨论非平凡函数依赖

定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → (F)Y。
举例:学号列X的每一个都能唯一找到姓名列Y中一个学生姓名,而Y的某些姓名在学号列的真子集X’中找不到对应的学号,即部分学号不能决定所有的姓名
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X ( P)→ Y

在这里插入图片描述
定义6.3 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z(Z⊈Y), 则称Z对X传递函数依赖(transitive functional dependency)。记为:X →(传递) Z。
注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
[例] 在关系Std(Sno, Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname,
Mname传递函数依赖于Sno

3.码

用函数依赖来定义吗啊,完全依赖(F),部分函数依赖(P)
(候选码就是完全函数依赖)
在这里插入图片描述
候选码是最小的超码。
若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
主属性与非主属性
包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
经常提到的主码或候选码都简称码。
在这里插入图片描述
全码:整个属性组是码,称为全码(All-key)
在这里插入图片描述
外码在参照完整性那块有提到过。外码在被参照关系中是主码。

4.范式—必考

关系数据库中的关系必须满足一定的要求。满足 不同程度要求的为不同范式。
在这里插入图片描述
在这里插入图片描述
某一关系模式R为第n范式,可简记为R∈nNF。

一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
在这里插入图片描述

4.1第一范式

关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
在这里插入图片描述

4.2 2NF

若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
理解:
一个或多个候选码,候选码里面的属性是主属性
不是主属性的,完全依赖于任何一个候选码

在这里插入图片描述
在这里插入图片描述

4.3 3NF

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.4BCNF

在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
非BCNF的关系模式也可以通过分解成为BCNF。例如STJ可分解为ST(S,T)与TJ(T,J),它们都是BCNF。
存在问题:
1.数据冗余问题
2.插入异常
若要新增一门课程 J3 及对应教师 T3,但尚无学生选择该课程(主码),则无法插入数据。
3. 删除异常
若删除某学生的选课记录,可能导致教师与课程的关联信息丢失。
4.更新异常
若修改某教师的授课课程,需同时更新所有相关记录,否则会导致数据不一致。

3NF允许主属性之间存在非候选码的决定因素,而 BCNF 不允许。
即:3NF 只限制非主属性的依赖,BCNF 进一步限制主属性的依赖。
3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。

http://www.lryc.cn/news/2401280.html

相关文章:

  • SQL 中 JOIN 的执行顺序优化指南
  • Oracle双平面适用场景讨论会议
  • OD 算法题 B卷【矩阵稀疏扫描】
  • 使用BERT/BiLSTM + CRF 模型进行NER进展记录~
  • HarmonyOS运动开发:精准估算室内运动的距离、速度与步幅
  • Web攻防-SQL注入高权限判定跨库查询文件读写DNS带外SecurePriv开关绕过
  • C语言数据结构笔记3:Union联合体+结构体取8位Bool量
  • 深拷贝与浅拷贝的区别?如何手写实现一个深拷贝?
  • grafana 批量视图备份及恢复(含数据源)
  • SAP学习笔记 - 开发22 - 前端Fiori开发 数据绑定(Jason),Data Types(数据类型)
  • 网络编程之TCP编程
  • C++进阶--C++11(04)
  • 当AI遇上防火墙:新一代智能安全解决方案全景解析
  • STL 库基础概念与示例
  • Spring MVC参数绑定终极手册:单多参/对象/集合/JSON/文件上传精讲
  • Fluence推出“Pointless计划”:五种方式参与RWA算力资产新时代
  • innovus: ecoAddRepeater改变hier层级解决办法
  • 华为OD机试真题——硬件产品销售方案(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 突破数据孤岛:StarRocks联邦查询实战指南
  • 传统业务对接AI-AI编程框架-Rasa的业务应用实战(1)--项目背景即学习初衷
  • 低功耗架构突破:STM32H750 与 SD NAND (存储芯片)如何延长手环续航至 14 天
  • CSS选择子元素
  • git cherry-pick (28)
  • android与Qt类比
  • AX513CE 是一款针对模组渠道市场前端IPC应用而设计的数字SOC芯片 支持高清CMOS Sensor输入 国产品牌
  • Linux(11)——基础IO(上)
  • ABP-Book Store Application中文讲解 - Part 9: Authors: User Interface
  • 鸿蒙开发修改版本几个步骤
  • Hive自定义函数案例(UDF、UDAF、UDTF)
  • 【学习笔记】Circuit Tracing: Revealing Computational Graphs in Language Models