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

关系数据库基础入门

关系数据库概述

相关名词
1、关系:在关系数据库中,实体以及实体间的联系都是用关系来表示的。类似于程序设计语言中变量的概念。
2、关系模式:是对关系的描述。类似于程序设计语言中类型定义的概念。
3、关系模型:是由若干个关系模式组成的集合。
4、属性:用来描述某一个事物的特征。
5、域:每个属性的取值范围所对应一个值的集合。
6、候选码:若关系中的某一属性或属性组的值能唯一标识一个元组,则称该属性或属性组为候选码。
7、主码:又称为主键,若一个关系有多个候选码,则选定其中一个为主码。
8、主属性:包含在任何候选码中的各个属性称为主属性。
9、非主属性:不包含在任何候选码中的属性称为非主属性。
10、外码:如果关系模式R中的属性或属性组非该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码。
11、全码:关系模型的所有属性组是这个关系模式的候选码,称为全码。
12、元组/记录:行
13、字段、数据项
14、元数:属性的个数(列数)
15、基数:记录的个数(行数)
16、n元关系:元数为几,就是几元关系。
例:关系模式:
Student(Sno,Sname,SD,Sex)

关系数据库模式

• 关系模式可以表示为:
R(U,D,dom,F)

R表示关系名,U是组成该关系的属性名集合;D是属性的域;dom是属性向域的映像集合;F为属性间数据的依赖关系集合。
通常将关系模式简记为:
R(U)或 R(A1,A2,A3,…,An)
其中,R为关系名,A1,A2,A3,…,An为属性名或域名。
例:学生关系S有学号Sno、学生姓名Sname、系名SD、年龄SA属性;课程关系C有课程号Cno、课程名Cname、先修课程号PCno属性;学生选课关系SC有学号Sno、课程号Cno、成绩Grade属性。定义关系模式及主码如下(未考虑F,即属性间的依赖关系)。
(1)学生关系模式S(Sno,Sname,SD,SA)
(2)课程关系模式C(Cno,Cname,PCno),Dom(PCno)=Cno
(3)学生选课关系模式SC(Sno,Cno,Grade)

关系的三种类型

(1)基本关系(基本表或基表):它是实际存在的表,是实际存储数据的逻辑表示。
(2)查询表。查询结果对应的表。
(3)视图表。它是一种虚拟表,是由基本表或其他视图表导出的表。
它本身是不独立存储在数据库的,数据库只存放它的定义。

关系的完整性约束

• 关系的完整性约束:是对关系的某种约束条件,用来保证用户对数据库作出修改时不会破坏数据的一致性,防止对数据的意外破坏。
(1)实体完整性:是指基本关系R的主属性不能取空值。
(2)参照完整性:
• S(学号,姓名,所属院系,年龄)
• D(院系编号,学院名称,学院地址,系主任)
(3)用户定义完整性:是针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及到的数据必须满足的语义要求。

关系运算

基本的关系代数运算
1、并(Union)
• 关系R与S具有相同的关系模式,即R与S的元数相同(结构相同),关系R与S“并”
由属于R或属于S的元组构成的集合组成,记作R∪S,其形式定义如下:
在这里插入图片描述
2、差
• 关系R与S具有相同的关系模式,关系R与S的差是由属于R但不属于S的元组构成的集合,记作R-S,其形式定义如下:
在这里插入图片描述
3、广义笛卡儿积
• 两个元数分别为n目和m目的关系R和S的广义笛卡儿积是一个(n+m)列的元组的集合。
元组的前n列是关系R的一个元组,后m列是关系S的一个元组,记作R×S。
在这里插入图片描述
4、投影及广义投影
• 投影是从关系的垂直方向进行运算,在关系R中选择出若干属性列A组成新的关系,记作πA®,其
形式定义如下:
在这里插入图片描述
5、选择
• 选择运算是从关系的水平方向进行运算,是从关系R中选择满足给定条件的诸元组,
记作σF®,其形式定义如下:
σF®={t|tR∧F(T)=True}
• 其中,F中的运算对象是属性名(或列的序号)或常数,运算符、算术比较符(<、>、⩾、⩽、≠)和逻辑运算符(∧、∨、¬)。
• 例如,σ1⩾6®表示选取关系R中第1个属性值大于等于第6个属性值的元组;
σ1>'6’®表示选取关系R中第1个属性值大于6的元组。
注意6和’6’的区别,6是指从左往右数第6个属性,‘6’是指数字6(数值格式或文本
格式)

扩展的关系运算

1、交
• 关系R与S具有相同的关系模式,关系R与S的交由属于R同时又属于S的元组构成,关系R与S的交记作R⋂S,其形式定义如下:
在这里插入图片描述
2、连接
• 分为θ连接、等值连接与自然连接
在这里插入图片描述
(2)等值连接
在这里插入图片描述
3、除
在这里插入图片描述
4、外连接
• 外连接运算是连接运算的扩展,可以处理缺失的信息。
(1)左外连接⟕(左侧为准,右侧填充)
• 取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值NULL填充所有来自右侧关系
的属性,构成新的元组,将其加入自然连接的结果中。
在这里插入图片描述
(2)右外连接⟖(右侧为准,左侧填充)
取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值NULL填充所有来自左侧关系的
属性,构成新的元组,将其加入自然连接的结果中。
在这里插入图片描述

元组演算、域演算与查询优化

元组演算

• 元组关系演算是非过程化查询语言,简称元组演算。它只描述所需信息,而不给出获得该信息的
具体过程。
• 在元组演算中,其元组演算表达式中的变量是以元组为单位的,其一般形式为:
{t|P(t)}
其中,t是元组变量,P(t)是元组演算公式,公式是由原子公式组成。
1、原子公式:
(1)R(t)
R是关系名,t是元组变量,R(t)表示:t是关系R中的一个元组。
(2)t[i] θ C 或 C θ t[i]
t[i]表示元组变量t的第i个分量,C是常量,θ为算术比较运算符。
(3)t[i]θ u[j]
t和u是两个元组变量。t[i]θ u[j]表示元组变量t的第i个分量与元组变量u的第j个分量之间满足θ运
算。
2、公式的定义
• 若一个公式的一个元组变量前有全称量词⩝或存在量词∃符号,则称该变量为约束变量,否则称之
为自由变量。公式可递归定义如下:
(1)原子公式是公式。
(2)如果φ1和φ2是公式,那么,¬φ1,φ1∨φ2,φ1∧φ2,φ1⇒φ2也都是公式。分别表示如下命题:
¬φ1表示“φ1不为真”,φ1∨φ2表示“φ1或φ2为真”,φ1∧φ2表示“φ1和φ2都为真”;φ1⇒φ2表示
“若φ1为真则φ2为真”。
(3)如果是φ1公式,那么,∃t(φ1)是公式。∃t(φ1)表示这样一个命题:
“如果有一个t使φ1为真,则∃t(φ1)为真,否则∃t(φ1)为假”。
(4)如果是φ1公式,那么,⩝t(φ1)是公式。⩝t(φ1)表示这样一个命题:
“如果对所有的t使φ1为真,则⩝t(φ1)为真,否则⩝t(φ1)为假”。
• 公式中运算符的优先顺序为:
• θ > ⩝和∃ > ¬ > ∧和∨ > ⇒,加括号时,括号中的运算符优先。

域演算

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

查询优化

• 查询优化是指为查询选择最有效的查询计划的过程。一个查询可能会有多种实现方法,关键是如何找出一个与之等价的且操作时间又少的表达式,以节省时间、空间,提高查询效率。
• 在关系代数运算中,笛卡儿积、连接运算是最耗费时间和空间的。
1、优化的准则:
(1)提早执行选取运算。对于有选择运算的表达式,应优化成尽可能先执行选择运算的等价表达式,以得到较小的中间结果,减少运算量和从外存读块的次数。
(2)合并乘积与其后的选择运算为连接运算。
(3)将投影运算与其后的其他运算同时进行,以避免重复扫描关系。
(4)将投影运算和其前后的二目运算结合起来,使得没有必要为去掉某些字段再扫描一遍关系。
(5)在执行连接前对关系适当地预处理,就能快速地找到要连接的元组。方法有两种:索引连接法、排序合并连接法。
(6)存储公共子表达式。对于有公共子表达式的结果应存于外存(中间结果),这样,当从外存读
出它的时间比计算的时间少时,就可节约操作时间。

关系数据库设计基础知识

函数依赖

1、函数依赖
• 定义:设R(U)是属性集U上的关系模式,X、Y是U的子集。若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作:X→Y
• 如果X→Y,那么对于任意两个相同的X,所对应的Y是一定相同的。
• 如果X→Y,但Y⊈X,则称X→Y是非平凡的函数依赖。一般情况下总是讨论非平凡的函数依赖。
• 如果X→Y,但Y⊆X,则称X→Y是平凡的函数依赖。
• 函数依赖的定义要求关系模式R的任何可能的r都满足上述条件。因此不能仅考察关系模式R在某一时刻的关系r,就断定某函数依赖成立。
• 函数依赖是语义范畴的概念,我们只能根据语义来确定函数依赖。
2、完全函数依赖与部分函数依赖
• 定义:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’不能决定Y,则称Y对X完全函数依赖,记作:X→Y。如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作:X→Y。部分函数依赖也称局部函数依赖。
3、传递函数依赖
• 定义:在R(U,F)中,如果X→Y,Y→Z,Y⊈X,Y⇸X,则称Z对X传递依赖。
例:供应商(Sno,Sname,Status,City,Pno,Qty),及函数依赖集如下,判断该关系是否存在传递函数依赖和部分函数依赖。
F={Sno→Sname, Sno→Status, Status→City,(Sno,Pno)→Qty}

1、候选码和主码:设K为R(U,F)中的属性的组合,若K→U,且对于K的任何一个真子集K’,都有K’不
能决定U,则K为R的候选码,若有多个候选码,则选一个作为主码。
• 候选码通常也可以称为候选关键字,主码通常也可以称为主关键字或主键。
• 包含在任何一个候选码中的属性叫做主属性,否则叫做非主属性。
2、外码:若R(U)中的属性或属性组X非R的码,但X是另一个关系的码,则称X是R的外码(Foreign Key)或称外键。

多值依赖

• 定义:若关系模式R(U)中,X,Y,Z是U的子集,并且Z=U-X-Y。当且仅当对R(U)的
任何一个关系r,给定一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值
无关,则称“Y多值依赖于X”或“X多值决定Y”成立。记为:
X→→Y
• 多值依赖具有如下6条性质:
1、多值依赖具有对称性。即若X→→Y,则X→→Z,其中Z=U-X-Y。
2、多值依赖的传递性。即若X→→Y,Y→→Z,则X→→Z-Y。
3、函数依赖可以看成是多值依赖的特殊情况。
4、若X→→Y,X→→Z,则X→→YZ。
5、若X→→Y,X→→Z,则X→→Y ⋂ Z。
6、若X→→Y,X→→Z,则X→→Z-Y。

五、规范化

1NF(第一范式)

• 定义:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。记为R∈1NF。
例:学生(学号,姓名,学院编号,学院名称,课程号,成绩)
F={学号→姓名, 学号→学院编号, 学院编号→学院名称,(学号,课程号)→成绩}
• 存在的问题:
(1)数据冗余。
(2)更新异常(修改操作后数据不一致)。
(3)插入异常。
(4)删除异常。

2NF(第二范式)

• 定义:若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF。
• 换句话说:当1NF消除了非主属性对码的部分函数依赖,则称为2NF。
例:学生(学号,姓名,学院编号,学院名称,课程号,成绩)
F={学号→姓名, 学号→学院编号, 学院编号→学院名称,(学号,课程号)→成绩}
将学生关系分解为:
• 学生1(学号,姓名,学院编号,学院名称)∊2NF
• 学生2(学号,课程号,成绩)∊2NF

3NF(第三范式)

• 定义:若关系模式R(U,F)中不存在这样的码X,属性组Y及非主属性Z(Z⊈Y)使得
X→Y,(Y⇸X) Y→Z成立,则关系模式R∈3NF。
• 即:当2NF消除了非主属性对码的传递函数依赖,则称为3NF。
例:学生1(学号,姓名,学院编号,学院名称)∈2NF,但∉3NF。
将学生1分解为:
• 学生11(学号,姓名,学院编号)∈3NF
• 学生12(学院编号,学院名称)∈3NF

BCNF(巴克斯范式)

• 定义:关系模式R∈1NF,若X→Y且Y⊈X时,X必含有码,则关系模式R∈BCNF。
• 也就是说,当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。
• 结论:一个满足BCNF的关系模式,应有如下性质:
(1)所有非主属性对每一个码都是完全函数依赖;
(2)所有主属性对每一个不包含它的码,也是完全函数依赖;
(3)没有任何属性完全函数依赖于非码的任何一组属性。
例:R(Pno,Pname,Mname)的属性表示零件号、零件名和厂商名,如果约定,每种零件号只有一个零
件名,但不同的零件号可以有相同的零件名;每种零件可以有多个厂商生产,但每家厂商生产的零
件应有不同的零件名。函数依赖集如下:
(Pname,Mname)→Pno, Pno→Pname
候选码为(Pname,Mname)或(Pno,Mname)
分解为:R1(Pno,Pname)∈BCNF
R2(Pno,Mname)∈BCNF

4NF(第四范式)

• 定义:关系模式R∈1NF,若对于R的每个非平凡多值依赖X→→Y且Y⊈X时,X必含有码,则关系模式R(U,F)∈4NF。
• 4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。
• 注意:如果只考虑函数依赖,关系模式最高的规范化程度是BCNF,如果考虑多值依赖,关系模式最高的规范化程度是4NF。
例:学生(学号,选修课程,兴趣爱好)
• 学生1(学号,选修课程)∈4NF
• 学生2(学号,兴趣爱好)∈4NF
书目(ISBN,书名,作者,排名,出版社)
• 书目1(ISBN,作者,排名)∈4NF
• 书目2(ISBN,书名,出版社)∈BCNF

1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF
通过分解,可以将一个低一级范式的关系模式转换成若干个高一级范式的关系模式,这种过程叫做规范化。
在这里插入图片描述

Armstrong公理系统

• Armstrong公理系统(函数依赖的公理系统):设关系模式R(U,F),其中U为属性集,F是U上的一
组函数依赖,那么有如下推理规则:
(1)A1自反律:若Y⊆X⊆U,则X→Y为F所蕴涵。
(2)A2增广律:若X→Y为F所蕴涵,且Z⊆U,则XZ→YZ为F所蕴涵。
(3)A3传递律:若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵。
• 根据上述三条推理规则又可推出下述三条推理规则:
(1)合并规则:若X→Y,X→Z,则X→YZ为F所蕴涵。
(2)伪传递律:若X→Y,WY→Z,则XW→Z为F所蕴涵。
(3)分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴涵。

函数依赖的闭包F+及属性的闭包XF+

1、函数依赖的闭包F+
• 定义:关系模式R(U,F)中为F所逻辑蕴含的函数依赖的全体称为F的闭包,记为:F+。
例:R(U,F),U=(A,B,C,D),F={A→B,B→C,AC→D}
2、属性的闭包XF+
• 定义:设F为属性集U上的一组函数依赖,X⊆U,XF+={A|X→A能由F根据Armstrong公理导出},则称XF+为属性集X关于函数依赖集F的闭包。
• 即:属性集X的闭包XF+是指所有能由X决定的属性集合。
候选码的求解方法
• 给定一个关系模式R(U,F),U={A1,A2,…,An},F是R的函数依赖集,那么,可以将属性分为如下四类:
L:仅出现在函数依赖集F左部的属性
R:仅出现在函数依赖集F右部的属性
LR:在函数依赖集F左右部都出现的属性
NLR:在函数依赖集F左右部都未出现的属性
• 根据候选码的特性,对于给定一个关系模式R(U,F),可以得出如下结论:
结论1:若X(X⊆U)是L类属性,则X必为R的任一候选码的成员。若XF+=U,则X必为R的唯一候选码。
结论2:若X(X⊆U)是R类属性,则X不是R的任一候选码的成员。
结论3:是X(X⊆U)是NLR类属性,则X必为R的任一候选码的成员。
结论4:若X(X⊆U)是L类和NLR类属性组成的属性集,若XF+=U,则X必为R的唯一候选码。

候选码的求解方法

第1步、根据题意,将所有的属性分类:
• L:只在左边出现,一定是
• R:只在右边出现,一定不是
• LR:左右都出现,有可能是,也有可能不是
• NLR:左右都没出现,一定是
第2步、将所有的L类和NLR类属性组合起来,设为P,求其闭包PF+,如果是全集U,那么它就是候选码。
第3步、如果PF+不是全集U,则依次将LR类属性跟P组合起来求闭包,只要其闭包是全集U,就是候选码。

最小函数依赖集

• 如果函数依赖集F满足下列条件,则称F为一个最小函数依赖集,或称极小函数依赖集或最小覆盖。
(1)F中的任一函数依赖的右部仅有一个属性,即无多余的属性;
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价,即无多余的函数依赖;
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F与F-{X→A}⋃{Z→A}等价,即去掉各函数依
赖左边的多余属性。
即:(1)所有函数依赖的右侧只有一个属性。
(2)没有冗余的函数依赖。
(3)所有函数依赖的左侧没有冗余的属性。
例:关系模式R(U,F), R(A,B,C,D,E), F={A→BC,A→E,A→D,D→E,AC→D}

模式分解及分解后的特性

无损连接
• 分解及无损连接的定义:略,见教材P288
• 无损连接是指将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损连接分解。
• 定理:关系模式R(U,F)的一个分解ρ ={ R1(U1,F1),R2(U2,F2)},具有无损连接的充分必要的条件是:
U1⋂U2→U1-U2∈F+或U1⋂U2→U2-U1∈F+。
• 注意:这个定理只适用于分解为两个子模式的情况,分解为多个子模式的时候不适用。
例:对给定的关系模式R(U,F),U={A,B,C},F={A→B},有两个分解:ρ1 ={AB,BC}和 ρ2 ={AB,AC}。请判断这两个分解是否无损。
• 定义:设关系模式R(U,F)的一个分解 ρ ={R1(U1,F1), R2(U2,F2),…,Rk(Uk,Fk)},如
果F+=(⋃Fi)+,则称分解ρ保持函数依赖。
即:(F1⋃F2⋃F3⋃…⋃Fk)+ = F+
例:判断是否保持函数依赖:
(1)关系R(A1,A2,A3)上的函数依赖集F={A1A3→A2,A1A2→A3},R上的一个分解为ρ={(A1,A2),(A1,A3)}
(2)给定关系模式R(A1,A2,A3,A4),R上的函数依赖集F = {A1A3→A2,A2→A3},若将R分解为ρ={(A1,A2,A4),(A1,A3)}
(3)给定关系模式R(U,F),U ={A,B,C,D},F={A→B,BC→D},对关系R分解为R1(A,B,C)和R2(A,C,D)

相关文章:

  • 代码随想录算法训练营第四十八天
  • Golang 之 Context 源码解析(1.20+)
  • 贪心算法套路模板+详细适用场景+经典题目清单
  • arcgis js统计FeatureLayer的椭球面积、平面面积
  • Python 实现基于 OpenAI API 的文章标题自动生成评论
  • 【深度学习-Day 16】梯度下降法 - 如何让模型自动变聪明?
  • 解锁C++递归算法:从原理到实战
  • 跟Gemini制作PPT:图标的搜索
  • 2025-05-19 代码人生 - 精选文章周刊
  • AI架构职责分配——支持AI模块的职责边界设计
  • Kettle的简单大概介绍
  • MFC——编程框架和基础
  • 【JVM 01-引言入门篇】
  • 西方世界的劫难Ⅲ:斯贝斯的诅咒支线攻略
  • C++:适配器
  • leetcode hot100:十四、解题思路大全:真·大全!
  • 【软件测试】第三章·软件测试基本方法(基于需求的测试方法)
  • 【Hexo】2.常用的几个命令
  • window 显示驱动开发-视频内存供应和回收(二)
  • 比特授权云外壳加密支持Android 15!
  • 网站抄袭别人的做可以吗/网站提交百度收录
  • 无锡集团网站建设/营销型网站建设怎么做
  • 技术支持 英铭网站建设/网站制作 网站建设
  • css3网站模板/产品线上推广方案
  • 昆明乐网网站建设/企业建站模板
  • 个人网站网页制作/下载百度网盘