2.1 关系数据结构及形式化定义
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
2.1.1 关系
关系模型的数据结构只包含单一的数据结构 – 关系。
关系模型中数据的逻辑结构就是一张二维表。
关系模型就是处理表。
接下来从集合论的角度给出关系数据结构的形式化定义:
1. 域
域是一组具有相同数据类型的值的集合。
域确定了关系(表)中各列的取值范围。
2. 笛卡尔积
笛卡尔积是域上的一种集合运算。
笛卡尔积:
笛卡尔积为两个集合(两张表)中的每条数据进行两两组合的结果
例如:
如下为三个集合进行组合产生的笛卡尔积
笛卡尔积即从每个域中取出一个值进行组合。
笛卡尔积确定了关系各行的取值可能。
一个域允许的不同取值个数称为这个域的基数,即基数为一个域中不同值的个数。
Di(i=1,2,3,…)为有限集,基数为mi(i=1,2,3,…),D1 X D2 X D3 X … X Dn的基数M为M = m1 X m2 X m3 X … X mn,即笛卡尔积的基数为各个域的基数相乘的乘积。
3. 关系
关系为笛卡尔积的有限子集
笛卡尔积本身在实体空间中是无意义的,关系为在笛卡尔积中取出有意义的子集。
上图为从上一个表(笛卡尔积表)中取出各个域信息有对应关系的元组,组成一个子集,该子集为学生与专业和老师的对应关系,该表就有现实的意义。
子表中有几列就为几度或几目。
子表中只有一行为单元关系或一元关系。有几行为几元关系。
关系为笛卡尔积的有限子集,关系也为一张二维表,表的每行对应一个元组,表的每列对应一个域,由于域可以相同(如,导师的名字和学生的名字都可以来自姓名这个域),为了加以区分,每列要取一个名字,称为属性,n目关系有n个属性。
若关系中的某一属性可以唯一标识一个元组,称该属性为候选码。
若一个关系有多个候选码,选定其中一个为主码。
候选码的属性为主属性,不包含任何候选码中的属性为非主属性或非码属性。
如果关系模式的所有属性都是这个关系模式的候选码,为全码
关系可以有三种类型,基本关系(又称基本表或基表)、查询表、视图表。
– 基本表是实际存在的表,是实际存储数据的逻辑表示;
– 查询表是查询结果对应的表;
– 视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
基本关系具有一下六条性质:
- 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
- 不同的列可以出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。(属性名唯一性)。
- 列的顺序无所谓,即列的次序可以任意交换。
- 任意的两个元组的候选码不能取相同的值。
- 行的顺序无所谓,即行的次序可以任意交换。
- 分量必须取原子值,即每一个分量都必须取不可分的数据项(不能表中有表)。
关系模型要求关系必须规范化,即要求关系必须满足一定的规范条件。这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分割的数据项。规范化的关系简称为范式。
2.1.2 关系模式
关系模式是型,关系是值。关系模式是对关系的描述。
关系模式是静态的,是稳定的。
关系的描述称为关系模式,关系模式可以表示为R(U,D,DOM,F)
,其中
- R为关系名
- U为组成该关系的属性名集合
- D为U中属性所来自的域
- DOM为属性向域的映像集合(各行值对应域中的取值)
- F为属性间数据的依赖关系集合
关系模式通常简记为R(U)
或R(A1,A2,...)
其中Ai为属性名。
关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作不断的更新数据库中的数据。
关系模式可以理解为表头,关系为表中的值
2.1.3关系数据库
在关系模型中,实体以及实体之间的联系都是用关系来表示的。
例如导师实体和研究生实体,导师和研究生之间的一对多的联系可以使用一个关系来表示(构建一张导师与研究生之间联系的二维表)。
在给定的应用领域中,所有关系的集合构成了一个关系数据库(所有表的集合)。
关系数据库的型也称为关系数据库模式,是对关系数据库的描述。
关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。
关系数据库的型相当于对所有的数据库进行抽象,抽象出一个数据库的类;关系数据库的值相当于是对数据库这个类的实例化。
2.1.4 关系模型的存储结构
在关系数据库的物理组织中,一个表对应一个操作系统文件,将物理数据组织交给操作系统完成,从操作系统那申请若干个大文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理。
2.2 关系操作
2.2.1 基本的关系操作
关系模型中常用的关系操作包括查询和插入、删除、修改两大部分。
- 插入、删除、修改 为 数据更新操作
关系的查询表达能力很强,是关系操作中最主要的部分。
查询操作又可以分为选择、投影、连接、除、并、差、交、笛卡尔积等。其中选择、投影、并、差、笛卡尔积是5种基本操作,其他操作可以用基本操作来定义和导出。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合的方式。非关系数据模型的数据操作方式为一次一记录的方式。
2.2.2 关系数据语言的分类
早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。
关系代数用对关系的运算来表达查询要求;关系演算用谓词来表达查询要求。
关系演算可以按谓词变元的基本对象时元组变量还是与变量分为元组关系演算和域关系演算。
结构化查询语言(SQL):介于关系代数和关系演算之间
SQL是集查询、数据定义语言、数据操纵语言和数据控制语言与一体的关系数据语言。
SQL语言是一种高度非过程化的语言。
2.3 关系的完整性
关系模型中有三类完整性约束:
- 实体完整性
- 参照完整性
- 用户定义的完整性
其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称为关系的两个不变性,由关系系统自动支持。
用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
2.3.1 实体完整性
实体的完整性规则:
若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。所谓空值,就是“不知道”或“不存在”或“无意义”的值。
主属性,具有唯一性,不能取空值。
对于实体完整性规则的说明:
- 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
- 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
- 关系模型中以主码作为唯一性标识。
- 主码中的属性即主属性不能取空值。如果取了空值,就说明存在某个不能标识的实体。
2.3.2 参照完整性
现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这存在着关系与关系间的引用。
主码在一个关系中只有一个,外码可以有多个。
设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks对应,称F是R的外码,并称基本关系R为参照关系(关系R中的F参照了关系S中的Ks),基本关系S为被参照关系或目标关系。
关系R和S不一定是不同的关系,可以在同一关系中,引用本关系,例如,学生与该学生对应的班长。
目标关系S的主码Ks和参照关系R的外码F必须定义在同一个或同一组域上。
外码并不一定要与相应的主码同名,在实际应用中为了便于识别,当外码与相应的主码属于不同关系时,往往给它们取相同的名字。
参照完整性规则:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
- 或者取空值
- 或者等于S中某个元组的主码值
2.3.3 用户定义的完整性
任何关系数据库系统都应该支持实体完整性和参照完整性,这是关系模型所要求的。
用户定义的完整性,是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。例如,学生的成绩的取值应该在0~100之间。
用户定义的完整性是应用领域需要遵循的约束条件。