关系模型与关系运算
关系数据库
数据模型是现实世界数据特征的模拟和抽象。在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。数据模型通常由数据结构、数据操纵和完整性约束三部分组成,称为数据模型三要素。
- 数据结构:所研究对象类型的集合。这些对象是数据库的组成部分,主要包括两类:一类是与数据类型、内容、性质有关的对象。另一类是与数据之间联系有关的对象。数据结构是对系统静态特性的描述,是刻画一个数据模型性质最重要的方面,因此在数据库系统中,人们通常按照其数据结构的类型来命名数据模型。例如,层次结构、网状结构和关系结构的数据模型分别命名为层次模型、网状模型和关系模型。
- 数据操纵:对数据库中各种对象允许执行的操作集合及有关的操作规则。常用的数据操纵有检索和更新(包括新增、删除、修改)。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。数据操纵是对系统动态特性的描述。
- 数据的约束条件:是一组完整性规则的集合。完整性规则是给定数据模型中数据及其联系所具有的制约和储存规则,用来限定符合数据模型的数据库状态以及状态变化,以保证数据的正确性、有效性和相容性。
关系模型
- 关系模型的数据结构:数据结构非常单一,无论是实体还是实体间的联系,均由单一的结构来表示,该结构是一张规范化了的二维表,由行和列组成,称之为关系。
- 关系模型的数据操纵:包括查询、新增、删除、修改,其中查询的表达能力是最主要的部分。关系模型数据操纵的特点是集合操作,即操作的对象和结果都是集合,这种操作方式也称为一次一集合方式。
- 关系模型的完整性约束:包括实体完整性、参照完整性和用户定义的完整性三大类。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,由关系DBMS自动支持,用户定义的完整性是由应用领域需要遵循的约束条件,是具体领域中的语义约束。
关系的数学定义
-
域(Domain):一组具有相同数据类型的值的集合,如整数、实数等。形式化表示为D
-
笛卡尔积(Cartesian Product) :一组域D1,D2,…Dn的笛卡尔积:
其中(d1,d2,d3,…dn)称为一个元组,di称为一个分量;若Di的基数(值的个数)为Mi,则笛卡尔积的基数M为:
-
例如:教师关系中姓名 、性别两个域D1 、D2分别如下: D1={李力,王平,刘伟} D2={男,女} 则D1、D2的笛卡尔积为: D1×D2={(李力,男),(李力,女),(王平,男), (王平,女),(刘伟,男),(刘伟,女)}
- 数学上关系是笛卡尔积的任意子集,但在实际应用中关系是笛卡尔积中所取的有意义的子集。
例如:教师关系中的两个域姓名D1 、性别D2分别如下:D1={李力,王平,刘伟},D2={男,女}。表2虽然是表1的子集,但在实际中却如任何意义。因此可以说关系是有意义的笛卡尔积的子集。
关系的基本术语
- 元组(Tuple):关系表中每一个横行称作一个元组,组成元组的元素称为分量。
- 属性(Attribute):关系中的每一列即为一个属性,都有一个属性名。一个关系中往往有多个属性,用于刻画实体的特征,由于关系中的属性名具有标识列的作用,因而同一关系中的属性名不能相同。
-
候选码(Candidate Key): 若关系中的某一属性组(或单个属性)的值能唯一地标识一个元组,则称该属性组(或属性)为候选码。
-
最简单情况下,候选码仅由单个属性组成。如表3-2中,由于只有学生的姓名不重复,在这种情况下,只有姓名可以唯一地标识一个元组,所以“姓名”这个单属性可以为候选码。
-
最极端的情况下,候选码由该关系所有属性组合而成,这时,候选码也称为全码。
-
如表3-3中:图书馆有借阅关系(TCS),分别有三个属性,分别为:读者编号(T)、图书编号(C)和借阅时间(S)。在这种情况下,T、C、S三者之间是多对多关系,所以T、C、S这三个属性的组合才能是借阅关系(TCS)的候选码,在这种情况下,该候选码也称为全码。
-
-
主码(Primary Key)当一个关系有多个候选码时,选定其中的一个候选码为主码。若关系中只有一个候选码,则这个唯一的候选码就是主码。
- 主码是关系模型中的一个重要概念。每个关系必需选择一个主码,选定以后,不能随意改变。每个关系必定有且仅有一个主码,因为关系的元组无重复,至少关系的所有属性的组合可作为主码。
-
主属性(Prime Attribute)和非主属性(Non-Prime Attribute)主码中的属性称为主属性,不包含在主码中的属性称为非主属性。
- 有些教科书把候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性。如表3-2中,“姓名”为主属性,“性别”及“年龄”属性是非主属性。
若无特别申明,本书采用前一定义,即主码中的属性称为主属性。
- 有些教科书把候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性。如表3-2中,“姓名”为主属性,“性别”及“年龄”属性是非主属性。
-
外码(Foreign Key) 如果关系R2的一个或一组属性X不是R2的主码,而是另一关系R1的主码,则该属性或属性组X称为关系R2的外码,并称关系R2为参照关系(Referencing Relation),关系R1为被参照关系(Referenced Relation)。
-
由外码的定义可知,被参照关系的主码和参照关系的外码必须定义在同一个域上。在实际的应用中,为了便于识别,当外码与相应的主码属于不同的关系时,往往给它们取相同的名字,不过需要指出的是,外码并不一定要与相应的主码同名。
-
例如,表3-4是学生关系,学号属性为其主码,表3-5是选课关系,学号与课程号的属性组合为其主码,则选课关系中的“学号”属性不是该关系的主码,但却是学生关系的主码。根据外码定义,“学号”属性为选课关系的外码,选课关系为参照关系,学生关系为被参照关系。
-
关系的类型
- 关系分为基本表、视图表和查询表。这三种类型的关系以不同的身份保存在数据库中,其作用和处理方法也各不相同。
- 基本表:是关系数据库中实际存在的表,是实际存储数据的逻辑表示。
- 视图表:是由基本表或其他视图表导出的表。视图表是为数据查询方便、数据处理简便及数据安全要求而设计的虚表,它不对应实际存储的数据。由于视图表依附于基本表,我们可以利用视图表进行数据查询,或利用视图表对基本表进行数据维护,但视图表本身不需要进行数据维护。
- 查询表:是查询结果表或查询中生成的临时表。由于关系运算是集合运算,在关系操作过程中会产生一些临时表,称为查询表。尽管这些查询表是实际存在的表,但其数据可以从基本表中再抽取,且一般不再重复使用,所以查询表具有冗余性和一次性,可以认为它们是关系数据库的派生表。
关系的基本性质
- 列是同质的。每一列中的分量是同一类型的数据,来自同一个域。
- 不同列可来自同一个域。每一列为一个属性,不同的属性要给予不同的属性名。
- 列的位置具有顺序无关性,列的次序可以任意交换。由于列顺序是无关紧要的,因此在许多实际关系数据库产品中,增加新属性时,一般是插至最后一列。
- 任意两个元组不能完全相同。这是由笛卡尔积的性质决定的。
- 元组的位置具有顺序无关性,元组的次序可以任意交换。
- 分量必须取原子值,即每一个分量都必须是不可分的数据项。下表是数据库中不允许出现的结构。
关系模式
关系的描述称作关系模式,包括关系名、关系中的属性名、属性向域的映象、属性间的数据依赖关系等,其形式化描述为:
R(U,D,dom,F),简记作R(U)或R(A1 , A2 ,…, An ) 。
- 属性向域的映象一般直接说明为属性的类型、长度等。
- 某一时刻对应某个关系模式的内容(元组的集合)称作关系。
- 关系模式是型,是稳定的,静态的。关系是某一时刻的值,是随时间不断变化的,是动态的。
关系操作
- 关系操作:包括数据查询、数据维护和数据控制三大功能。
- 关系操作语言根据其理论(查询的表达方式)的不同可分为以下三类:
- 关系代数语言:关系代数语言是一种通过关系的运算来表达查询要求的语言。
- 关系演算语言:关系演算语言是一种通过查询结果元组应满足的谓词条件来表达查询要求的语言。
- 基于映象的语言:基于映象的语言是一种具有关系代数和关系演算双重特点的语言。
关系代数
-
关系代数的运算对象是关系,运算结果也是关系,关系代数用到的运算符主要包括四类:
- 集合运算符:∪(并),-(差),∩(交),X(广义笛卡尔积)。
- 专门的关系运算符:σ(选择),∏(投影),∞(连接),*(自然连接),÷(除)。
- 算术比较运算符:>(大于),≥(大于等于),<(小于),≤(小于等于),=(等于),≠(不等于)。
- 逻辑运算符:∧(与),∨(或),┐(非)。
-
关系代数的运算按运算符的不同主要分为两类:
- 传统的集合运算:把关系看成元组的集合,以元组作为集合中元素来进行运算,其运算是从关系的“水平”方向即行的角度进行的。包括∪,-,∩,X。
- 专门的关系运算:不仅涉及行运算,也涉及列运算,这种运算是为数据库的应用而引进的特殊运算。包括σ,∏, ,*,÷。
-
给定两个关系R、S,它们相容的条件是:
- 具有相同的度n;
- R中第i个属性和S中第i个属性必须来自同一个域。
- 除笛卡尔积外,要求参加运算的关系必须满足上述的相容性定义。
-
传统的集合运算
- 并(Union):关系R和关系S的并由属于R或属于S的元组组成,即R和S的所有元组合并,删去重复元组,组成一个新关系,其结果仍为n目关系。记作:R∪S=
- 差(Difference):关系R与关系S的差由属于R而不属于S的所有元组组成,即R中删去与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:
R-S={t|t∈R∧┐t∈S}。
- 交(Intersection):关系R与关系S的交由既属于R又属于S的元组组成,即R与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R∩S={t|t∈R∧t∈S}。
- 广义笛卡尔积(Extended Cartesian Product):两个分别为n目和m目关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1*k2个元组,记作:
R×S=
-
专门的关系运算
由于传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算。在讲专门的关系运算之前,为叙述上的方便先引入几个概念。
- 设关系模式为R(A1,A2,……An),它的一个关系为R,t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量。
- 象:
运算实例
-
选取
- 选取运算:是单目运算,是根据一定的条件在给定的关系R中选取若干个元组,组成一个新关系,记作:
其中,σ为选取运算符,F为选取的条件,它由运算对象(属性名、常数、简单函数)、算术比较运算符( > ,≥,<,≤,=,≠)和逻辑运算符(∨ ∧ ┐)连接起来的逻辑表达式,结果为逻辑值“真”或“假”。
-
选取运算实际上是从关系R中选取使逻辑表达式为真的元组,是从行的角度进行的运算。
-
例3-1 查询自动化系全体学生 。
-
投影
- 投影是单目运算。关系R上的投影是从R中选择出若干属性列,组成新的关系,从左到右按照指定的若干属性及顺序取出相应列,删去重复元组。记作:
其中A是R中的属性列, 为投影运算符, 为R中元组相应于属性集A的分量。
- 从其定义可看出,投影运算是从列的角度进行的运算。
-
例3-2 查询学生关系Student中有哪些系
-
连接
-
连接运算是二目运算,它是从两个关系的笛卡尔积中选取属性间满足连接条件的元组,组成新的关系。
-
-
在连接运算中,一种最常用的连接是自然连接。所谓自然连接就是在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉。即如果R与S具有相同的属性组Y
-
自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。
-
等值连接不要求相等属性值的属性名相同,而自然连接要求相等属性值的属性名必须相同,即两关系只有在同名属性才能进行自然连接。等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接。
-
-
除(Division):除运算是二目运算。给定关系 和 ,其中X、Y、Z为属性组。R中的Y与S中的Y 可以有不同的属性名,但必须来自相同的域集。R与S的除运算得到一个新的关系 ,P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集 包含S在Y上投影的集合。记作:
关系除法运算的步骤:
- 将被除关系属性分为象集属性集和结果属性集,如本例分别为{C, D, E}和{A, B}。
- 除关系中,对象集属性进行投影,得到目标关系数据集。
- 将被除关系分组,与结果属性值一样的元组分为一组,得到每一个结果属性值的象集。
- 若象集包含目标关系数据集,则该结果数据值作为结果输出。