第2章 关系数据库K5Word文档下载推荐.docx
《第2章 关系数据库K5Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第2章 关系数据库K5Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
![第2章 关系数据库K5Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/23/f665c6d7-b583-40c0-aba4-b007304f57c7/f665c6d7-b583-40c0-aba4-b007304f57c71.gif)
◆关系演算(或逻辑方式):
关系演算是用谓词来表达查询要求的方式。
◆元组关系演算语言:
谓词变元的基本对象是元组变量。
◆域关系演算语言:
谓词变元的基本对象是域变量。
◆
◆具有关系代数和关系演算双重特点的语言典型代表:
SQL。
4、关系数据语言的特点
◆关系语言是一种高度非过程化的语言
◆用户不必请求DBA(数据库管理员)为其建立特殊的存取路径,存取路径的选择由DBMS的优化机制来完成。
◆用户不必求助于循环结构就可以完成数据操作。
◆关系代数、元组关系演算和域关系演算三种语言在表达能力上是完全等价的。
◆能够嵌入高级语言中使用(SQL)
◆关系代数、元组关系演算和域关系演算均是抽象的查询语言,这些抽象的语言与具体的DBMS中实现的实际语言并不完全一样(同一要求在不同的DBMS中实现方法不同)。
但它们能用作评估实际系统中查询语言能力的标准或基础。
◆实际的查询语言除了提供关系代数或关系演算的功能外,还提供了许多附加功能,例如集函数、关系赋值、算术运算等。
◆SQL(StructurelQueryLanguage)是介于关系代数和关系演算之间的语言SQL。
SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、DDL(数据定义语言)、DML(数据操纵语言)和DCL(数据控制语言)于一体的关系数据语言。
它充分体现了关系数据语言的特点和优点,是关系数据库的标准语言。
关系数据语言的共同特点是:
语言具有完备的表达能力,是非过程化的集合操作语言,功能强。
三、关系的三类完整性约束
关系模型允许定义三类完整性约束:
实体完整性、参照完整性和用户定义的完整性。
◆实体完整性:
由关系系统自动支持。
◆参照完整性:
早期系统不支持,目前大型系统能自动支持。
◆用户定义的完整性:
反映应用领域需要遵循的约束条件,体现了具体领域中的语义约束,用户定义后由系统支持。
2.2关系数据结构及形式化定义
关系模型中,实体和实体之间的联系均由单一的结构类型即关系(表)来表示。
从集合论角度给出关系数据结构的形式化定义如下:
2.2.1关系
1、域(Domain):
一组具有相同数据类型的值的集合。
例如:
整数、实数、介于某个取值范围的整数、指定长度的字符串集合、{‘男’,‘女’}、某个范围内的日期等。
2、笛卡尔积(CartesianProduct):
给定一组域D1,D2,…,Dn,这些域中可以是相同的,D1,D2,…,Dn的笛卡尔积为:
D1×
D2×
……×
Dn={(d1,d2,…,dn)|di∈Di,i=1,2,3,4………n}。
说明:
1)笛卡尔积是所有域的所有取值的一个组合、不能重复
2)每一个元素(d1,d2,….dn)叫作一个n元组或简称元组。
元素中的每一个值di叫作一个分量。
3)若Di(i=1,2,…,n)为有限集,其基数(元素个数)是Mi(i=1,2,…,n),则D1×
…×
Dn的基数M=M1×
M2×
M3×
…….×
Mn
4)笛卡尔积不满足交律:
即(d1,d2,….dn)≠(d2,d1,….dn)
5)笛卡尔积可表示为一个二维表。
表中的每行对应一个元组,表中的每列对应一个域。
例1:
三个域D1是导师集合SU={张清玫,刘逸}
D2是专业集合SP={计算机专业,信息专业}
D3是研究生集合POS={李勇,刘晨,王敏}。
则D1,D2,D3的笛卡尔积为:
D3笛卡尔积的基数为2*2*3=12,即D1×
D3一共有12个元组,这12个元组可列成一张二维表(如表2.1)。
表2.1D1、D2、D3的笛卡尔积
导师集合SU
专业集合SP
研究生集合POS
张清玫
刘逸
计算机专业
信息专业
李勇
刘晨
王敏
注意:
其中有一些元组是无实际意义的。
3、关系:
Dn的子集叫作在域D1,D2,…,Dn上的关系(实际上是一些元组)。
表示为:
R(D1,D2,…,Dn)
R是关系名,n是关系的目或度(Degree)。
说明:
1)关系中的每个元素是关系中的元组,通常用t表示。
n=1时,称为单目关系;
n=2时,称为二目关系。
2)关系是笛卡尔积的有限子集,所以关系也表示为一个二维表,表的每行对应一个元组,表的每列对应一个域。
3)域可以相同,为了加以区分,必须对每列起一个名字,称为属性。
n目关系必有n个属性。
4)关系满足交换律,即
(d1,d2,…,di,dj,…,dn)=(d1,d2,…,dj,di,…,dn)
(i,j=1,2,…,n)
由于笛卡尔积不满足交律,在关系中为关系的每个列附加一个属性名以取消关系元组的有序性。
5)码
候选码:
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
在最简单的情况下,候选码只包含一个属性.在最极端情况下,关系模式的所有属性组是这个关系模式的侯选码称为全码。
主码:
若一个关系有多个候选码,则选定其中一个为主码,主码的各属性为主属性。
学生关系中的学号。
非码属性:
不包含在任何侯选码中属性是非码属性。
性别。
例2:
在表2.1的笛卡尔积中取出一个子集来构造一个关系。
一般情况下,一个研究生只师从于一个导师,学习某一个专业,从中取出有实际意义的元组来构造关系。
该关系的名为SAP,属性名取域名即SU、SP、POS。
该关系表示为:
SAP(SU,SP,POS)
如导师与专业是一对一的,即一个导师只在一个专业;
导师与研究生是一对多的,即一个导师可以带多名研究生;
而一名研究生只有一个导师,则SAP可以包含三个元组,如表2.2所示。
表2.2SAP关系
SU(教师)
SP(专业)
POS(学生)
若研究生都不重名,则POS属性的每一个值都唯一地标识了一个元组,POS可以作为SAP关系的主码。
4、关系的三种类型:
1)基本关系(通常又称为基本表或基表):
是实际存在的表,它是实际存储数据的逻辑表示。
2)查询表:
是查询结果对应的表。
3)视图表:
视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
5、按照关系的定义,关系可以是一个无限集合。
当关系作为关系数据模型的数据结构时,有如下的限定和扩充:
(1)无限关系在数据库系统中是无意义的。
因此,限定关系数据模型中的关系必须是有限集合。
(2)通过为关系的每个列附加一个属性名的方法取消关系属性的有序性。
即(d1,d2,…di,dj,…,dn)=(d1,d2,…dj,di,…dn)
(i,j=1,2,3,……n)
6、基本关系具有以下六条性质:
①列是同质的(Homogeneous),即每一列中的分量是同一类型的数据,来自同一个域。
例如:
姓名是字符型。
②不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
例如在上面的例子中,也可以只给出两个域:
人员(PERSON):
张清玫,刘逸,李勇,刘晨,王敏。
专业:
计算机专业,信息专业。
SAP关系的导师属性和研究生属性都从PERSON域中取值。
为了避免混淆,必须给这两个属性取不同的属性名,而不能直接使用域名。
定义导师属性名为SP,研究生属性名为PP。
③列的顺序无所谓,即列的次序可以任意交换。
遵循这一性质的数据库产品(如ORACLE),增加新属性时,永远是插至最后一列。
但也有许多关系数据库产品没有遵循这一性质,例如VFP仍然区分了属性顺序。
④任意两个元组不能完全相同。
由笛卡尔积的性质决定,但许多关系数据库产品没有遵循这一性质。
Oracle,VFP等都允许关系表中存在两个完全相同的元组,除非用户特别定义了相应的约束条件。
⑤行的顺序无所谓,即行的次序可以任意交换。
遵循这一性质的数据库产品(如ORACLE),插入一个元组时永远插至最后一行。
但也有许多关系数据库产品没有遵循这一性质,例如VFP仍然区分了元组的顺序
⑥分量取原子值,即每一个分量都是不可分的数据项。
这是规范条件中最基本的一条。
规范化的关系简称为范式(NormalForm)。
在下表中虽然很好地表达了导师与研究生之间的一对多关系,但由于POS分量取了两个值,不符合规范化的要求,因此这样的关系在数据库中是不允许的。
SU(教师)
SP(专业)
POS(学生)
PG1
PG2
2.2.2关系模式
1、什么是关系模式
◆关系模式(RelationSchema)是型,关系是值。
◆关系模式是对关系的描述。
2、关系模式要描述的内容
◆关系是元组的集合,关系模式是元组集合的结构,即关系模式的元组由哪些属性构成?
属性来自的哪些域?
属性与域之间的映象关系。
◆元组语义以及完整性约束条件:
这些约束可以通过属性取值范围的限定。
正式职工年龄小于60岁(65岁以后必须退休)。
或者通过属性值间的相互关连(主要体现于值的相等与否)反映出来。
关系模式应当刻划出这些完整性约束条件。
◆属性间的数据依赖关系集合。
◆一个关系通常是由赋予它的元组语义来确定的。
元组语义实质上是一个n目谓词(n是属性集中属性的个数)。
凡使该n目谓词为真的笛卡尔积中的元素(或者说凡符合元组语义的那部分元素)的全体就构成了该关系模式的关系。
3、关系模式的表示
◆一个关系模式是一个5元组。
它可以形式化地表示为:
R(U,D,dom,F)
R为关系名、U为组成该关系的属性名集合、D为属性组U中属性所来自的域、dom为属性向域的映象集合,F为属性间数据的依赖关系集合。
例:
导师和研究生出自同一个域---人,取不同的属性名,并在模式中定义属性向域的映象,即说明它们分别出自哪个域:
dom(SU)=dom(POS)=PERSON
◆关系模式通常可以简记为R(U)或R(A1,A2,…………An)
其中R为关系名,A1、A2、A3、……、An为属性名。
而域名及属性向域的映象常常直接说明为属性的类型、长度。
定义学生与课程关系模式及主码如下:
S(Sno,Sname)--------Key(Sno)
C(Cno,Cname)--------Key(Cno)
SC(Sco,Cno,Grade)----Key(Sco,Cno)
4、关系模式与关系
◆关系是关系模式在某一时刻的状态或内容。
◆关系模式是对关系的描述,是静态的、稳定的。
◆关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
◆在实际应用中,人们常常把关系模式和关系都称为关系,通过上下文加以区别。
2.2.3关系数据库
1、关系数据库:
在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
2、关系数据库的型与值
◆关系数据库的型:
是关系数据库模式,是对关系数据库的描述,包括若干域的定义和在这些域上定义的若干关系模式。
◆关系数据库的值:
是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库。
2.3关系的完整性
◆关系模型的完整性规则是对关系的某种约束条件。
◆关系模型中有三类完整性约束:
●实体完整性
●参照完整性
●用户定义的完整性
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
一、实体完整性
1、规则2.1---实体完整性规则:
若属性A是基本关系R的主属性,则属性A不能取空值。
例1:
在关系“学生(学号,姓名,专业,年纪)”中,“学号”属性为主码,则“学号”不能取空值。
实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是主码整体不能取空值。
(主码可以包含多项主属性)
学生选课关系“选修(学号,课程号,成绩)”中,“学号、课程号”为主码,则“学号”和“课程号”两个主属性都不能取空值。
2、关系模型必须遵守实体完整性规则的原因
1)实体完整性规则是针对基本关系而言的。
一个基本关系通常对应现实世界的一个实体集。
学生关系对应于学生的集合。
2)现实世界中的实体是可区分的,因为它们具有某种唯一性标识。
在关系模型中以主码作为唯一性标识。
3)主码中的属性即主属性不能取空值。
所谓空值就是“不知道”或“无意义”的值。
如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第
(2)点相矛盾。
因此这个规则称为实体完整性。
二、参照完整性
1、关系间的引用
在关系模型中实体及实体间的联系都是用关系来描述的,这样就存在着关系与关系间的引用。
学生实体和专业实体可以用下面的关系表示,其中主码用下划线标识:
学生(学号,姓名,专业号,年龄)
专业(专业号,专业名)
这两个关系之间存在着属性的引用,即学生关系引用了专业关系的主码“专业号”。
学生关系中的“专业号”值必须是确实存在的专业的专业号。
即学生关系中的某个属性的取值需要参照专业关系的属性取值。
学生、课程、学生与课程之间的多对多联系可以如下三个关系表示:
学生(学号,姓名,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)。
这三个关系之间也存在着属性的引用,选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。
选修关系中某些属性的取值需要参照其他关系的属性取值。
不仅两个或两个以上的关系间可以存在引用关系,同一关系内部属性间也可能存在引用关系。
例3关系:
学生(学号,姓名,专业号,年龄,班长学号)
“学号”属性是主码,“班长”属性(用学号表示)表示该学生所在班级的班长的学号,它引用了本关系“学号”属性,即“班长”必须是确实存在的学生的学号。
2.外码(ForeignKey)
外码定义:
设F是基本关系R的一个或一组属性,但不是关系R的主码。
如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码。
1)基本关系R为参照关系、基本关系S为被参照关系或目标关系。
2)关系R和S不一定是不同的关系。
目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或一组)域上。
3)外码并不一定要与相应的主码同名。
当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。
例4:
学生实体和专业实体可以用下面的关系表示,主码用下划线标识:
学生R(学号,姓名,专业号,年龄)
专业S(专业号,专业名)
学生关系R的“专业号”属性与专业关系S的主码“专业号”相对应,因此“专业号”属性是学生关系R的外码。
此时,专业关系S是被参照关系,学生关系R为参照关系。
如图所示:
专业号
学生关系专业关系
例5:
学生(学号,姓名,性别,专业号,年龄)
学号课程号
学生关系选课关系课程关系
选修关系的“学号”属性(是主属性,但不是主码)与学生关系的主码“学号”相对应,“课程号”属性(是主属性,但不是主码)与课程关系的主码“课程号”相对应,因此“学号”和“课程号”属性是选修关系的外码。
这里学生关系和课程关系均为被参照关系,选修关系为参照关系。
在例3中,“班长”属性与本关系的主码“学号”属性相对应,因此“班长”是外码。
这里学生关系既是参照关系也是被参照关系。
外码并不一定要与相应的主码同名(如例3)。
在实际应用当中,为了便于识别,当外码与相应的主码属于不同关系时,往往给它们取相同的名字。
3、参照完整性规则
规则2.2----参照完整性规则:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
●或者取空值(F的每个属性值均为空值);
●或者等于S中某个元组的主码值。
即属性F本身不是主属性,则可以取空值,否则不能取空值。
参照完整性规则就是定义外码与主码之间的引用规则。
例6:
对于学生关系中每个元组的“专业号”属性只能取下面两类值:
(1)空值,表示尚未给该学生分配专业。
(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中。
即被参照关系“专业”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。
例7:
对于例2,按照参照完整性规则,“学号”和“课程号”属性也可以取两类值:
空值或目标关系中已经存在的值。
但由于“学号”和“课程号”是选修关系中的主属性,按照实体完整性规则,它们均不能取空值。
所以选修关系中的“学号”和“课程号”属性实际上只能取相应被参照关系中已经存在的主码值。
参照完整性规则中,R与S可以是同一个关系。
例如对于例3,按照参照完整性规则,“班长”属性值可以取两类值:
(1)空值,表示该学生所在班级尚未选出班长。
(2)非空值,这时该值必须是本关系中某元组的学号值。
三、用户定义的完整性
◆用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
某个属性必须取唯一值、某些属性值之间应满足一定的函数关系、某个属性的取值范围在0~100之间等。
例:
课程(课程号,课程名,学分)
“课程名”属性必须取唯一值
非主属性“课程名”也不能取空值
“学分”属性只能取值{1,2,3,4}
◆关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。
小结
◆关系数据结构
●关系
⏹域、笛卡尔积、关系(关系、属性、元组)
⏹候选码,主码,主属性
⏹基本关系的性质
●关系模式
●关系数据库
◆关系的数据操作集合
●查询
⏹选择、投影、连接、除、并、交、差
●数据更新
⏹插入、删除、修改
◆关系的完整性约束
⏹实体完整性
⏹参照完整性
●外码
⏹用户定义的完整性
=======完=======