【数据库】关系数据库

一、关系数据结构及形式化定义

关系数据库系统是支持关系模型的数据库系统。

1、关系

关系模型的数据结构非常简单,只包含单一的数据结构——关系。在用户看来,关系模型中数据的逻辑结构是一张扁平的二维表。
关系模型的数据结构虽然简单却能够表达丰富的语义,描述出现实世界的实体以及实体间的各种联系。也就是说,在关系模型中,现实世界的实体以及实体间的各种联系均用单一的结构类型,即关系来表示。

1、域(domain)
定义:域是一组具有相同数据类型的值的集合。
例如:自然数、整数、实数、长度小于25字节的字符串集合、{0,1}、{男、女}、大于等于0且小于等于100的正整数等,都可以是域。

2、笛卡尔积(cartesian product)
笛卡尔积是域上的一种集合运算。
定义:给定一组域D1,D2,…,Dn,允许其中某些域是相同的,D1,D2,…,Dn的笛卡尔积为
D1×D2×…×Dn = {(d1,d2,…,dn)| di ∈ Di,i = 1,2,…,n}
其中,每一个元素(d1,d2,…,dn)叫作一个n元组,或简称元组(tuple)。元素中的每一个值di叫做一个分量(component)。
一个域允许的不同取值个数称为这个域的基数(cardinal number)。
笛卡尔积可表示为一张二维表。表中的每行对应一个元组,表中的每一列的值来自一个域。
例:设有3个域:导师 = { 张清玫,刘逸 };专业 = { 计算机专业,信息专业 };研究生 = { 李勇,刘晨,王敏 },则笛卡尔积 = 导师 × 专业 × 研究生。
该笛卡尔积的基数为2×2×3 = 12,也就是说,D1×D2×D3一共有2×2×3 = 12个元组。这12个元组可列成一张二维表,如下图所示:
【数据库】关系数据库_第1张图片
3、关系
(1)关系的定义:D1×D2×…×Dn的子集叫作在域D1, D2, …, Dn上的关系,表示为:R(D1,D2,…,Dn)。这里R表示关系的名字,n是关系的目或度(degree)。
关系中的每个元素是关系中的元组,通常用t表示。
当 n = 1 时,称该关系为单元关系或一元关系。
当 n = 2 时,称该关系为二元关系。

(2)关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。

  • 关系中不同列可以对应相同的域

  • 为了加以区分,必须对每列起一个名字,称为属性(Attribute)(属性满足交换律!)

  • n目关系必有n个属性

  • 候选码(Candidate key)
    若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。(解释:超码!)

  • 主码(Primary key)
    若一个关系有多个候选码,则选定其中一个为主码。

  • 全码(All - key)
    所有属性组共同组成的候选码,称为全码(All - key)。

  • 主属性
    候选码的诸属性称为主属性(Prime attribute)。

  • 非主属性
    不包含在任何侯选码中的属性称为非主属性( Non - Prime attribute) 或非码属性(Non - key attribute)

(3)关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。

  • 基本关系(基本表或基表)
    实际存在的表,是实际存储数据的逻辑表示。
  • 查询表
    查询结果对应的表。
  • 视图表
    由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。

基本关系具有以下6条性质:
(1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
(2)不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
(3)列的顺序无所谓,列的次序可以任意交换;
(4)任意两个元组的候选码不能相同;
(5)行的顺序无所谓,行的次序可以任意交换;
(6)分量必须取原子值,即每一个分量都必须是不可分的数据项。

关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件。这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项。 规范化的关系简称为范式。

2、关系模式

关系模式是对关系的描述。包括:

  • 元组集合的结构:属性构成;属性来自的域;属性与域之间的映象关系
  • 元组语义以及完整性约束条件
  • 属性间的数据依赖关系集合

它可以形式化地表示为R(U,D,DOM,F)。 其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。

关系模式与关系:

  • 关系模式
    对关系的描述,静态的、稳定的。
  • 关系
    (1)关系模式在某一时刻的状态或内容;
    (2)动态的、随时间不断变化的。
  • 关系模式和关系往往统称为关系,通过上下文加以区别

3、关系数据库

在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
关系数据库也有型和值之分。

  • 关系数据库的型也称为关系数据库模式,是对关系数据库的描述。
  • 关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。

二、关系操作

1、基本的关系操作

常用的关系操作:

  • 查询:选择、投影、连接、除、并、交、差、笛卡尔积
  • 数据更新:插入、删除、修改
  • 选择、投影、并、差、笛卡尔积是5种基本操作

关系操作的特点:
集合操作方式:操作的对象和结果都是集合,一次一集合的方式。

2、关系数据语言的分类

1、关系代数语言:用对关系的运算来表达查询要求。如:ISBL
2、关系演算语言:用谓词来表达查询要求
(1)元组关系演算语言:谓词变元的基本对象是元组变量。如:APLHA, QUEL
(2)域关系演算语言:谓词变元的基本对象是域变量。如:QBE
3、具有关系代数和关系演算双重特点的语言。如:结构化查询语言SQL(Structured Query Language)

三、关系的完整性

关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。 其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。

1、实体完整性

实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则属性A取值必须唯一且不能取空值。

对于实体完整性规则说明如下:
(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3)相应地,关系模型中以主码作为唯一性标识。
(4)主码中的属性即主属性不能取空值。

2、参照完整性

参照完整性规则:若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:

  • 或者取空值(F的每个属性值均为空值)
  • 或者等于S中某个元组的主码值

3、用户定义的完整性

针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。

四、关系代数

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。

1、传统的集合运算

传统的集合运算是二目运算,包括并、差、交、笛卡尔积4种运算。
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组。
(1)并
关系R与关系S的并记作 R∪S = { t | t ∈ R∨t ∈S } 。其结果仍为n目关系,由属于R或属于S的元组组成。
(2)差
关系R与关系S的差记作 R - S = { t | t∈R∧t ∉S } 。其结果仍为n目关系,由属于R而不属于S的所有元组组成。
(3)交
关系R与关系S的交记作 R ∩ S = { t | t ∈ R∧t ∈S } 。其结果仍为n目关系,由既属于R又属于S的所有元组组成。关系的交可以用差来表示,即R∩S = R - (R - S)。
(4)广义的笛卡尔积
两个分别为n目和m目的关系R和S的笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的笛卡尔积有k1×k2个元组。记作
在这里插入图片描述

【数据库】关系数据库_第2张图片

2、专门的关系运算

专门的关系运算包括选择、投影、连接、除运算等。 为了叙述上的方便,我们先引入几个记号。

  1. 设关系模式为R(A1, A2, …, An)。它的一个关系设为R。t∈R表示t是R的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个分量 。
  2. 若A={Ai1, Ai2, …, Aik},其中Ai1, Ai2, …, Aik是A1, A2, …, An中的一部分,则A称为属性列或域列。フA则表示{A1, A2, …, An}中去掉{Ai1, Ai2, …, Aik}后剩余的属性组。t[A]=(t[Ai1], t[Ai2], …, t[Aik])表示元组t在属性列A上诸分量的集合。
  3. R为n目关系,S为m目关系。设tr∈R(r为下标),ts∈S(s为下标),则trts(整个式子上方加一个半弧,r和s为下标) 称为元组的连接(Concatenation)。它是一个(n+m)列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。
  4. 给定一个关系R(X,Z),X和Z为属性组。我们定义,当t[X]=x时,x在R中的象集(Images Set)为:
    Zx={t[Z]|t∈R, t[X]=x}
    x在R中的像集为R中Z属性对应分量的集合,而这些分量所对应的元组中的属性组X上的值为x。

1、选择(selection)
选择又称为限制。它是在关系R中选择满足给定条件的诸元组,记作 σF® = { t | t∈R∧F(t) = ‘真’ },其中F表示选择条件,它是一个逻辑表达式,取逻辑值‘真’或‘假’。
逻辑表达式F的基本形式为:X1 θ Y1,其中θ表示比较运算符,它可以是>、≥、<、≤、=或≠。X1、Y1等是属性名或常量或简单函数。

例1、查询信息系(IS系)全体学生。
σSdept=‘IS’(Student)
例2、查询年龄小于20岁的学生。
σSage<20(Student)

2、投影(projection)
关系R上的投影是从R中选择出若干属性列组成新的关系。记作 πA® = { t[A] | t ∈R },其中A为R中的属性列。
投影操作是从列的角度进行的运算。
注意:投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

例:查询学生的姓名和所学专业编号。
πsname,mno(Students)

3、连接(join)
连接也称为θ连接(条件连接)。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作:
在这里插入图片描述
其中,A和B分别为R和S上度数相等且可比的属性组,θ是比较运算符。

连接运算中有两种最为重要也最为常用的连接,一种是等值连接,另一种是自然连接。
(1)θ 为“=”的连接运算称为等值连接。
在这里插入图片描述
(2)自然连接是一种特殊的等值连接。
在这里插入图片描述
例:设图(a)和(b)分别为关系R和关系S,图(c)为非等值连接的结果,图(d)为等值连接的结果,图(e)为自然连接的结果。
【数据库】关系数据库_第3张图片

  • 悬浮元组:被舍弃的元组。
  • 外连接:如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接。
  • 左外连接:如果只把左边关系R中要舍弃的元组保留就叫做左外连接。
  • 右外连接:如果只把右边关系S中要舍弃的元组保留就叫做右外连接。

4、除运算
设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。
下面用象集来定义除法:
给定关系 R(X, Y) 和 S(Y, Z),其中X,Y,Z为属性组。R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自相同的域集。 R 与 S 的除运算得到一个新的关系 P(X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上分量值 x 的象集 Yx 包含 S 在 Y上投影的集合,记作:R ÷ S = { tr[X] | tr ∈ R ∧ ΠY(S) ⊆ Yx }
其中Yx为x在R中的象集,x = tr[X] 。

例:设关系R、S分别为下图的(a)和(b),R÷S的结果为图(c)。
【数据库】关系数据库_第4张图片
在关系R中,A可以取四个值{ a1,a2,a3,a4 }。其中:
a1的象集为{ (b1,c2),(b2,c3),(b2,c1) }
a2的象集为{ (b3,c7),(b2,c3) }
a3的象集为{ (b4,c6) }
a4的象集为{ (b6,c6) }
S在(B,C)上的投影为:{(b1,c2),(b2,c1),(b2,c3) }。
显然只有a1的象集(B,C)a1包含了S在(B,C)属性组上的投影, 所以:R ÷ S = { a1 }。

5、总结
在关系代数运算中,把由五个基本操作经过有限次复合的式子称为关系代数表达式。这种表达式的运算结果仍是一个关系。我们可以用关系代数表达式表示各种数据查询操作。

举个栗子:
设教学数据库中有三个关系:
学生关系S(S # , SNAME, AGE, SEX)
选课关系SC(S# ,C # ,GRADE)
课程关系C(C# , CNAME, TEACHER)
其中S#代表学号,SNAME代表学生姓名,AGE代表年龄,SEX代表性别,C#代表课程号,CNAME代表课程名,GRADE代表成绩,TEACHER代表授课老师。
下面用关系代数表达式表达每个查询语句。

  1. 检索学习课程号为C2的学生号与成绩。
    在这里插入图片描述
  2. 检索学习课程号为C2的学生学号与姓名。
    在这里插入图片描述
    由于这个查询涉及到两个关系S与SC,因此先要对这两个关系进行自然连接操作,然后再执行选择和投影操作。
  3. 检索选修课程名为MATHS的学生学号与姓名。
    在这里插入图片描述
  4. 检索选修课程号为C2或C4的学生学号。
    在这里插入图片描述
  5. 检索至少选修课程号为C2或C4的学生学号。
    表达式中也可以不写属性名,而写上属性的序号。
    在这里插入图片描述
    这里(SC×SC)表示关系SC自身相乘的笛卡尔积操作。
  6. 检索不学C2课的学生姓名与年龄。
    在这里插入图片描述
    这里要用到集合差操作。先求出全体学生的姓名和年龄,再求出学了C2课的学生的姓名和年龄,最后执行两个集合的差操作。
  7. 检索学习全部课程的学生姓名。
    编写这个查询语句的关系代数表达式过程如下:
    (1)学生选课情况可用操作 πS#,C#(SC) 表示。
    (2)全部课程可用操作 πC#(C)表示。
    (3)学了全部课程的学生号可用除法操作表示,操作结果是学号S#集:
    在这里插入图片描述
    (4)从S#求学生姓名SNAME,可以用自然连接和投影操作组合而成:
    在这里插入图片描述
  8. 检索所学课程包含学生S3所学课程的学生学号。
    (1)学生选课情况可用操作 πS#,C#(SC) 表示。
    (2)学生S3所学课程可用操作 πC#(σS#=‘S3’(SC))表示。
    (3)所学课程包含学生S3所学课程的学生学号,可以用除法操作求得:
    在这里插入图片描述

你可能感兴趣的:(数据库)