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

MYSQL学习笔记(个人)(第十五天)

自学《数据库系统原理与应用》——— 黄宝贵、马春梅、禹继国 —— 清华大学出版社

关系规范化理论:

关系规范化的作用:

        为了设计一个合理、可靠、简单、正确的关系数据库,形成了关系规范化理论。其包括两个方面的内容:1.数据依赖,研究属性之间的依赖关系;2.范式,是关系模式符合某种级别的标准。

1.问题的提出:

下面有个关系模式:
SCD(sno, sname, dname, office, cno, cname, score)

其中按照现实需求和实际应用,可得语义:
(1)一个学院有多名学生,一名学生只能属于一个学院。
(2)一个学院只有一处办公地点一处办公地点只能被一个学院使用。
(3)一名学生可以选修多门课程,一门课程可以被多名学生选修。
(4)每名学生选修每门课程都有一个成绩。
在SCD关系模式中填人部分数据,可得到该关系模式的具体实例,如表所示:

snosnamednameofficecnocanmescore
S1舟舟计算机学院C101C1计算机基础90
S1舟舟计算机学院C101C2数据库98
S3断弦计算机学院C101C2数据库85
S3断弦网络学院F301C3程序设计92
S3断弦网络学院F301C1计算机基础79
S5小维软件学院S201C1计算机基础64
S5小维软件学院S201C3程序设计92

在这个数据库当中存在异常,分为为:

1.数据亢余:

        数据冗余就是某种信息在关系中重复存储多次。
在SCD关系中,学生的学号sno和姓名sname重复存储,其重复的次数等于该生选修的课程门数;课程号cno和课程名称cname重复存储,其重复的次数等于选修该门课程的学生的人数等等。

2.插入异常:

        插人异常一般是指该插人的记录插不进去。
在SCD关系中,如果某个学生没有选修课程,那么该学生的信息就插不进去,如果某门课程没有被学生选修,该课程信息也插不进去。如果有新成立的学院,但是该学院没有学生,或是有学生但学生都没有选课那么该学院的信息也都插不进去。

3.删除异常:

        删除异常是指不该删除的记录被删除。
在SCD关系中,如果某名学生只选修了一门课程,由于某种原因,该生连这门课程也不选修了,那么当删除该生的选修记录时,就会把该生的记录也删除。同理,如果某门课程只被一名学生选修,由于某种原因,该生不再选修这门课程,那么在删除该选修记录的同时就会把这门课的课程记录也删除。

4.更新异常:

        更新异常是指由于更新不完全而导致数据不一-致。
在SCD关系中,如果更换某学院的办公地点那么该院有多少学生,修了多少门课,都要修改。如果漏掉了其中一条记承.就会出现该学院有两处办公地点的情况,和语义不相符,导致数据不一致。

2.问题的原因:

关系模式产生异常是因为它“包罗万象”,包含大量的属性,导致数据亢余。

3.问题的解决:

        对上述关系模式进行分解,使每一一个关系模式表达的概念单一,属性间的数据依赖关系单纯化,从而消除这些异常。例如,SCD关系模式可以分解为以下四个关系模式:
PDepartment( dname ,office)
PStudent(sno, sname,dname)
PCourse( cno,cname)
SC(sno,cno,score)

PDepartment
dnameoffice
计算机学院C101
网络学院F301
软件学院S201
PStudent
snosnamesdept
S1舟舟计算机学院
S3断弦网络学院
S5小维软件学院
PCourse
cnocname
C1计算机基础
C2数据库
C3程序设计
PSC
snocnoscore
S1C190
S1C298
S3C285
S3C392
S3C179
S5C164
S5C392

函数依赖:

        数据依赖是同一关系中属性间的相互依赖和相互制约,是语义的体现。
数据依赖有很多种,主要包括函数依赖(Functional Dependency, FD)、多值依赖(Multivalued Dependency ,MVD)和连接依赖(Join Dependency,JD)。

函数依赖的定义:

        设R(U)是属性集U 上的关系模式,X、Y是∪的子集。若对于R(U)的任意一个可能的关系r,对于x的每一个具体的值,Y都有唯一的值与之对应 。则称x丽数确定Y或Y函数依赖于X,记作X->Y。
X称为函数依赖的决定因素,Y称为依赖因素。
在关系模式SCD中,对于每个学号sno的值,都有唯-的姓名sname 与之相对应,即当知道某个学生的学号时,就一定能唯一确定该生的姓名。因此,称sno丽数确定sname,或者称sname函数依赖于sno,记作sno->sname,其中sno是决定因素,sname是依赖因素。
(st:类似数学里函数的概念)

        如果一个X,无唯一确定Y的话,就是Y不函数依赖于X,记作X-/->Y。若X->Y,同时Y->X,他们就是相互函数依赖,记作X\leftrightarrowY。

函数依赖的分类:

如果X->Y,同时Y是X的真子集,称X->Y是平凡的函数依赖,如果不是真子集,就是非平凡的函数依赖。

如果对于X的任何一个真子集X`,都有X`-/->Y,则称Y完全函数依赖与X,若存在X`->Y,则称Y部分函数依赖X。

若X->Y,Y不是X的真子集,且Y-/->X,Y->Z,则称Z传递函数依赖与X,记作-T->Z。

函数依赖的推理规则:

Armstrong公理系统:
设X、Y和Z是R(U)上的属性集,Armstrong公理系统有以下三条基本公理:
A1(自反性):如果Y ⊆ X,则X → Y。
A2(增广性):如果X → Y且Z ⊆ U,则XZ → YZ。
A3(传递性):如果X → Y且Y → Z,则X → Z。

Armstrong公理系统的推论:
B1(合并性):如果X → YZ且X → Z,则X → YZ。
B2(分解性):如果X → Y且X → Z,则X → YZ。
B3(结合性):如果X → Y且W → Z,则XW → YZ。
B4(伪传递性):如果X → Y且WY → Z,则XW → Z。

关系的规范化:

规范化:

一个关系模式符合的范式级别越低,越容易出现异常现象,所以关系规范化重点在把多于一个概念的关系”分离“,形成多个关系。

范式:

范式是符合某一种级别的关系模式的集合,是衡量关系模式规范化程度的标准,分为1NF,2NF,3NF,BCNF,4ND,5NF。

1NF(第一范式)

定义:数据库表的每一列都是不可再分的原子数据项,不能有嵌套的集合、数组或结构体等复杂数据类型。
判断方法
每一列的数据必须是单一值,不能是复合值。
例如,地址列应该包含具体的“城市”、“街道”、“门牌号”等单个字段,而不是一个包含所有地址信息的字符串。

非1NF表

IDNameAddress
1AliceNew York, Broadway Street
2BobLA, Hollywood Boulevard

1NF表

IDNameCityStreet
1AliceNew YorkBroadway Street
2BobLAHollywood Boulevard

2NF(第二范式)

定义:在满足1NF的基础上,所有非主属性完全依赖于整个主键,而不仅仅是主键的一部分。
判断方法
主键为单列时,表已经满足2NF。
主键为多列时,所有非主属性必须依赖于整个主键,而不是主键的某一部分。

非2NF表

OrderIDProductIDProductNameQuantityOrderDate
1101Laptop22023-10-01
2102Phone12023-10-02

2NF表

OrderIDProductIDQuantity
11012
21021
31011
ProductIDProductName
101Laptop
102Phone

3NF(第三范式)

定义:在满足2NF的基础上,所有非主属性不依赖于其他非主属性,只依赖于主键。
判断方法
需要检查表中的非主属性,确保它们之间没有依赖关系。
如果存在传递依赖,则需要分解表。

非3NF表

StudentIDStudentNameDepartmentDepartmentHead
1AliceCSProf. Smith
2BobEEProf. Jones

3NF表

StudentIDStudentNameDepartment
1AliceCS
2BobEE
DepartmentDepartmentHead
CSProf. Smith
EEProf. Jones

BCNF(Boyce-Codd范式)

定义:BCNF是比3NF更严格的范式,要求所有非平凡函数依赖的决定因素必须是候选键。
判断方法
检查表中的所有非平凡函数依赖,确保决定因素是候选键。
如果表中有非候选键的属性依赖于其他非候选键,则表不符合BCNF。

非BCNF表

CourseIDTeacherIDTeacherName
101T1Alice
102T2Bob

BCNF表

CourseIDTeacherID
101T1
102T2
TeacherIDTeacherName
T1Alice
T2Bob

4NF(第四范式)

定义:在满足BCNF的基础上,要求表中不存在多值依赖,即某些列值之间不存在多种独立选择关系。
判断方法
检查表中是否存在多值依赖,如果存在,则分解表以消除多值依赖。

非4NF表

EmployeeIDSkill1Skill2
1JavaPython
2C++Ruby

4NF表

EmployeeIDSkill
1Java
1Python
2C++
2Ruby

多值依赖

定义:多值依赖描述了表中某些列值之间的特殊关系,当一个列的值与另一些列的值之间存在多种独立选择时,就存在多值依赖。

数学表达:如果对于每个A的值,B有多个独立的值,那么称A多值依赖于B,记作A →→ B。

具有多值依赖的表

StudentIDCourseIDBookID
1101B1
1102B2
1103B3
2101B1
2102B2

分解后的表

StudentIDCourseID
1101
1102
1103
2101
2102
CourseIDBookID
101B1
102B2
103B3
http://www.dtcms.com/a/495093.html

相关文章:

  • 网站登录验证码不正确云端互联网站建设
  • Zotero安装+坚果云+iPad同步方法及问题整理
  • 做彩票网站的方案网站建设资金报告
  • 基于路由器,不同域的网络A和网络B之间如何通信?
  • 【小白笔记】编程概念用最直白的方式解释
  • Docker 容器化部署 Node.js 详细手册
  • 浅析cef在win和mac上的适配
  • 营销型网站一般有哪些内容珠海公司网站建设
  • PHP 空指针引用:潜藏在运行时的
  • Android 中 Padding 与 Margin 的深度解析:从概念到实战区分
  • 关于dtoj 177 谐振之石的一些反思
  • UniverSheets最新版本测试
  • JD-Eclipse 插件核心功能与安装指南
  • kafka与zero-copy
  • 上海建站模板平台做外贸网站渠道
  • QT-常用控件(多元素控件)
  • MFC + OpenCV 图像预览显示不全中断问题解决:GDI行填充详解
  • 家庭农场做网站网站排名做不上去
  • LWIP通讯之PHY芯片LAN8720引脚详解
  • YOLOv3 :目标检测的经典融合与创新
  • 数值计算-线性方程组的迭代解法
  • win设置
  • 基于波动率自适应的ETF动态止盈止损模型构建与优化
  • C++ 继承笔记
  • H20裸金属租赁:捷智算安全隔离,独立配置保障数据安全
  • 装饰公司怎么做网站建设asp网站视频教程
  • 商业综合体 BAS 楼宇自控系统 + 能效管理系统:双系统协同打造高效低碳运营标杆
  • sm2025 模拟赛22 (2025.10.17)
  • 矢量图形AI 2025软件百度网盘下载与安装步骤分享
  • 建筑公司网站作用支付商城网站制作