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

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

关系规范化理论:

关系规范化的作用:

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

1.问题的提出:

下面有个关系模式:

SCD(sno, sname, dname, office, cno, cname, score)

其中按照现实需求和实际应用,可得语义:

(1)一个学院有多名学生,一名学生只能属于一个学院。

(2)一个学院只有一处办公地点一处办公地点只能被一个学院使用。

(3)一名学生可以选修多门课程,一门课程可以被多名学生选修。

(4)每名学生选修每门课程都有一个成绩。

在SCD关系模式中填人部分数据,可得到该关系模式的具体实例,如表所示:

|-----|-------|-------|--------|-----|-------|-------|
| sno | sname | dname | office | cno | canme | score |
| S1 | 舟舟 | 计算机学院 | C101 | C1 | 计算机基础 | 90 |
| S1 | 舟舟 | 计算机学院 | C101 | C2 | 数据库 | 98 |
| S3 | 断弦 | 计算机学院 | C101 | C2 | 数据库 | 85 |
| S3 | 断弦 | 网络学院 | F301 | C3 | 程序设计 | 92 |
| S3 | 断弦 | 网络学院 | F301 | C1 | 计算机基础 | 79 |
| S5 | 小维 | 软件学院 | S201 | C1 | 计算机基础 | 64 |
| S5 | 小维 | 软件学院 | S201 | C3 | 程序设计 | 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)

dname office
计算机学院 C101
网络学院 F301
软件学院 S201
[PDepartment]
sno sname sdept
S1 舟舟 计算机学院
S3 断弦 网络学院
S5 小维 软件学院
[PStudent]
cno cname
C1 计算机基础
C2 数据库
C3 程序设计
[PCourse]
sno cno score
S1 C1 90
S1 C2 98
S3 C2 85
S3 C3 92
S3 C1 79
S5 C1 64
S5 C3 92
[PSC]

函数依赖:

数据依赖是同一关系中属性间的相互依赖和相互制约,是语义的体现。

数据依赖有很多种,主要包括函数依赖(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,他们就是相互函数依赖,记作XY。

函数依赖的分类:

如果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表

ID Name Address
1 Alice New York, Broadway Street
2 Bob LA, Hollywood Boulevard

1NF表

ID Name City Street
1 Alice New York Broadway Street
2 Bob LA Hollywood Boulevard

2NF(第二范式)

定义 :在满足1NF的基础上,所有非主属性完全依赖于整个主键,而不仅仅是主键的一部分。
判断方法

主键为单列时,表已经满足2NF。

主键为多列时,所有非主属性必须依赖于整个主键,而不是主键的某一部分。

非2NF表

OrderID ProductID ProductName Quantity OrderDate
1 101 Laptop 2 2023-10-01
2 102 Phone 1 2023-10-02

2NF表

OrderID ProductID Quantity
1 101 2
2 102 1
3 101 1
ProductID ProductName
101 Laptop
102 Phone

3NF(第三范式)

定义 :在满足2NF的基础上,所有非主属性不依赖于其他非主属性,只依赖于主键。
判断方法

需要检查表中的非主属性,确保它们之间没有依赖关系。

如果存在传递依赖,则需要分解表。

非3NF表

StudentID StudentName Department DepartmentHead
1 Alice CS Prof. Smith
2 Bob EE Prof. Jones

3NF表

StudentID StudentName Department
1 Alice CS
2 Bob EE
Department DepartmentHead
CS Prof. Smith
EE Prof. Jones

BCNF(Boyce-Codd范式)

定义 :BCNF是比3NF更严格的范式,要求所有非平凡函数依赖的决定因素必须是候选键。
判断方法

检查表中的所有非平凡函数依赖,确保决定因素是候选键。

如果表中有非候选键的属性依赖于其他非候选键,则表不符合BCNF。

非BCNF表

CourseID TeacherID TeacherName
101 T1 Alice
102 T2 Bob

BCNF表

CourseID TeacherID
101 T1
102 T2
TeacherID TeacherName
T1 Alice
T2 Bob

4NF(第四范式)

定义 :在满足BCNF的基础上,要求表中不存在多值依赖,即某些列值之间不存在多种独立选择关系。
判断方法

检查表中是否存在多值依赖,如果存在,则分解表以消除多值依赖。

非4NF表

EmployeeID Skill1 Skill2
1 Java Python
2 C++ Ruby

4NF表

EmployeeID Skill
1 Java
1 Python
2 C++
2 Ruby

多值依赖

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

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

具有多值依赖的表

StudentID CourseID BookID
1 101 B1
1 102 B2
1 103 B3
2 101 B1
2 102 B2

分解后的表

StudentID CourseID
1 101
1 102
1 103
2 101
2 102
CourseID BookID
101 B1
102 B2
103 B3
相关推荐
一只自律的鸡4 小时前
【MySQL】第二章 基本的SELECT语句
数据库·mysql
序属秋秋秋4 小时前
《Linux系统编程之入门基础》【Linux基础 理论+命令】(上)
linux·运维·服务器·ubuntu·centos·命令模式
rechol4 小时前
C++ 继承笔记
java·c++·笔记
liliangcsdn5 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
JJJJ_iii6 小时前
【机器学习01】监督学习、无监督学习、线性回归、代价函数
人工智能·笔记·python·学习·机器学习·jupyter·线性回归
Han.miracle7 小时前
数据结构——二叉树的从前序与中序遍历序列构造二叉树
java·数据结构·学习·算法·leetcode
知识分享小能手8 小时前
uni-app 入门学习教程,从入门到精通,uni-app基础扩展 —— 详细知识点与案例(3)
vue.js·学习·ui·微信小程序·小程序·uni-app·编程
一张假钞8 小时前
Ubuntu SSH 免密码登陆
linux·ubuntu·ssh
Wang's Blog9 小时前
Linux小课堂: 文件操作警惕高危删除命令与深入文件链接机制
linux·运维·服务器