一、【关系数据结构】
1、关系
1)域(Domain)
定义1–域是一组具有相同数据类型的值的集合。
例如,整数、正整数、实数、大于等于0且小于等于100的正整数、{0,1,2,3,4}等都可以是域。
2)笛卡尔积(Cartesian Product)
定义2–设定一组域D1, D2, …, Dn,在这组域中可以是相同的域。定义D1, D2, …, Dn,的笛卡 尔积为D1×D2×…×Dn={(d1, d2, …, dn) | di∈Di, i=1, 2, …, n}
其中每一个元素(d1, d2, …, dn)叫做一个n元组(n-tuple)或简称元组(Tuple),元素中的每个 值di(i=1, 2,…, n)叫做一个分量(Component)。 如果Di(i=1, 2,…, n)为有限集,其基数(Cardinal number)为mi (i=1, 2,…, n),则 D1×D2×…×Dn的基数为:
笛卡尔积可以表示为一个二维表,
表中
【例1】 笛卡尔积举例。
给出3个域:
D1=学号集合stno={121001, 121002 }
D2=姓名集合stname={李贤友, 周映雪}
D3=性别集合 stsex={男, 女}
则D1, D2, D3,的笛卡尔积为:
D1×D2×D3={(121001, 李贤友, 男), (121001, 李贤友, 女), (121001, 周映雪, 男), (121001, 周映雪, 女), (121002, 李贤友, 男), (121002, 李贤友, 女), (121002, 周映雪, 男), (121002, 周映雪, 女)} 其中(121001, 李贤友, 男), (121001, 李贤友, 女), (121002, 周映雪, 男)等都是元组, 121001, 121002, 李贤友, 周映雪
男, 女等都是分量,这个笛卡尔积的基数是2×2×2=8,即共有8个元组, 可列成一张二维表,如表1-所示。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑表1–D1, D2, D3的笛卡尔积
3)关系(Relation)
定义3–笛卡尔积D1×D2×…×Dn的子集称为D1,D2,…,Dn上的关系,表示为 R(D1,D2,…,Dn) 这里的R 表示关系的名称,n是关系的目或度(Degree)。
当n=1时,称该关系为单元关 系或一元关系。
当n=2时,称该关系为二元关系。
当n=m 时,称该关系为m 元关系。
关系中的每个元素是关系中的元组,通常用t 表示。 在一般情况下,D1,D2,…,Dn的笛卡尔积是没有实际意义的,只有它的某个子集才 有实际意义,举例如下。
【例2】 关系举例
在例1–的笛卡尔积中,许多元组是没有意义的,因为一个学号只标识一个学生的姓名,一个 学生只有一个性别,表1–的一个子集才有意义,才可以表示学生关系,将学生关系取名为S, 表示为S(stno, stname, stsex),列成二维表如表2–所示。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓表2–S关系
• (1)关系的元组、属性和候选码
关系是笛卡尔积的有限子集,所以关系也是一个二维表。
• 元组(Tuple) 表的每一行,对应一个元组。
• 属性(Attribute) 表的每一列,对应一个域,由于域可以相同,为了加以区分,必须对每一列起一个唯一的 名字,称为属性。
• 候选码(Candidate key) 若关系中某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
候选键码中的诸属性称为主属性(Prime attribute),不包含在任何候选码中的属性称为 非主属性(Non-prime attribute)或非码属性((Non-key attribute)。 在最简单的情况下,候选码只包含一个属性,在最极端的情况下,关系模式的所有属性 组成这个关系模式的候选码,称为全码(All-key)。
• 主码(Primary key) 在一个关系中有多个候选码,从中选定一个作为主码。
• (2)关系的类型
关系有3种类型:基本关系(又称基本表或基表)、查询表和视图表。
• 基本关系:实际存在的表,是实际存储数据的逻辑表示;
• 查询表 :查询结果对应的表;
• 视图表 :由基本表或其它视图标导出的表,是虚表,不对应实际存储的数据;
• (3)关系的性质
• 关系具有以下的性质:
列的同质性:每一列中的分量是同一类型的数据,来自同一个域。
列名唯一性:每一列具有不同的属性名,但不同列的值可以来自同一个域。
元组相异性:关系中任意两个元组的候选码不能相同。
行序的无关性:行的次序可以互换。
列序的无关性:列的次序可以互换。
分量原子性:分量值是原子的,即每一个分量都必须是不可分的数据项。
• (4)规范化
关系模型要求关系必须是规范化(normalization)的,规范化要求关系必须满足一定的规 范条件,而在规范条件中最基本的一条是每一个分量必须是不可分的数据项。规范化的关系简 称为范式(Normal Form)。
例如,表3–所示的关系就是不规范的,存在”表中有表”的现象。
2、关系模式
在关系数据库中,关系模式是型,关系是值。
关系是元组的集合,关系模式是对关系的描述,所以关系模式必须指出这个元组集合的结 构,即它由哪些属性构成,这些属性来自哪些域。
定义4--关系模式(Relation Schema)可以形式化地表示为R (U, D, DOM, F )
其中:R是关系名,U 是组成该关系的属性名集合,D 是属性所来自的域,DOM是属性 向域的映象集合,F 是属性间的数据依赖关系集合。
关系模式通常可以简记为 R (U ) 或R(A1, A2, …, An) 其中,R是关系名,A1, A2, …, An 为属性名。 关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、 随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
在实际应用中,我们常常把关系模式和关系统称为关系。
9个 结果再此不展示
3. 关系数据库
在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。 关系数据库的型称为关系数据库模式,是对关系数据库的描述,包括若干域的定义和在这 些域上定义的若干关系模式。 关系数据库的值是这些关系模式在某一时刻对应的关系的集合。
二、【关系操作】
1、基本的关系操作
关系操作包括查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作两大部分。
查询操作是关系操作最重要的部分,可分为选择(Select)、投影(Project)、连接(Join)、除 (Devide)、并(Union)、差(Except)、交(Intersection)、笛卡尔积等。其中的5种基本操作是并、 差、笛卡尔积,选择、投影,其它操作可由基本操作来定义和导出。 关系操作的特点是集合操作方式,即操作的对象与结果都是集合。这种操作方式亦称为一次 一集合(set-at-a-time)方式,相应地,非关系模型的数据操作方式则为一次一记录(record-at-a- time)方式。
2、关系操作语言
关系操作语言是数据库管理系统提供的用户接口,是用户用来操作数据库的工具,关系 操作语言灵活方便,表达能力强大,可分为关系代数语言、关系演算语言和结构化查询语言三 类。
• (1)关系代数语言 用对关系的运算来表达查询要求的语言。
• (2)关系演算语言 用谓词来表达查询要求的语言,又分为元组关系演算语言和域关系演算语言,前者如 ALPHA,后者QBE。
• (3)结构化查询语言 介于关系代数和关系运算之间,具有关系代数和关系演算双重特点,如SQL。 以上三种语言,在表达能力上是完全等价的。 关系操作语言是一章高度非过程化语言,存取路径的选择由数据库管理系统的优化机制自 动完成。
三、【关系的完整性】
1、实体完整性(Entity Integrity)
规则1–实体完整性规则 若属性(一个或一组属性) A是基本关系R的主属性,则A不能取 空值。空值(null value)指”不知道”或”不存在”的值。 例如,在学生关系S(stno, stname, stsex)中,学号stno是这个关系的主码,则stno不能 取空值。又如在选课关系——选课(学号, 课程号, 分数)中,”学号, 课程号”为主码,则”学 号”和”课程号”两个属性都不能取空值。
实体完整性规则说明如下:
(1)实体完整性规则是针对基本关系而言。一个基本表通常对应现实世界的一个实体集。
(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3)相应地,关系模型中以主码作为唯一性标识。
(4)主码中的属性即主属性不能取空值。
2、参照完整性(Referential Integrity)
在现实世界中实体之间存在的联系,在关系模型中都是用关系来描述,自然存在关系与 关系间的引用,参照完整性一般指多个实体之间的联系,一般用外码实现,举例如下。
【例3】 学生实体与学院实体可用以下关系表示,其中的主码用下划线标识。
学生S(学号, 姓名, 性别, 出生日期, 专业, 总学分, 学院号)
学院C(学院号, 学院名, 院长)
这两个关系存在属性的引用,学生关系引用了学院关系的主码”学院号”,学生关系”学 院号”必须是确实存在的学院的学院号,即学院关系有该学院的记录。
【例4】 学生、课程、学生与课程之间的联系可用以下3个关系表示,其中的主码用下划 线标识。
学生S(学号, 姓名, 性别, 出生日期, 专业, 总学分)
课程L(课程号,课程名,学分)
选课C(学号,课程号,分数)
这3个关系存在属性的引用,选课关系引用了学生关系的主码”学号”和课程关系的主码” 课程号”,选课关系”学号”和”课程号”的取值需要参照学生关系的”学号”取值和课程关 系的”课程号”取值。
【例5】学生关系的内部属性之间存在引用关系,其中的主码用下划线标识。
学生(学号, 姓名, 性别, 出生日期, 专业, 总学分, 班长学号)
在该关系中,
”学号”属性是主码,
”班长学号”属性是所在班级班长的学号,
它引用了 本关系”学号”属性,即”班长学号”必须是确实存在的学生学号。
定义5--设F 是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。 如果F与Ks相对应,则称F是R是的外码(Foreign Key)。并称基本关系R为参照关系 (Referencing Relation),基本关系S为被参照关系(Referenced Relation)或目标关系(Target Relation)。关系R和S不一定是不同的关系。
在例3–中,学生关系的”学院号”与学院关系的主码”学院号”相对应,所以,”学院 号”属性是学生关系的外码,学生关系是参照关系,学院关系是被参照关系。
在例4–中,选课关系”学号”和学生关系的主码”学号”相对应,选课关系”课程号” 和课程关系的主码”课程号”相对应,所以,”学号”属性和”课程号”属性是选课关系的外码,选课关系是参照关系,学生关 系和课程关系都是被参照关系。
在例5–中,学生关系的主码名是”学号”,外码名是” 班长学号”。但在实际应用中,为了便于识别,当外码与相应的主码属于不同的关系时,往往 取相同的名字。 参照完整性规则就是定义外码与主码之间的引用规则。
规则2–参照完整性规则 若属性(或属性组) F 是基本关系R 的外码,它与基本关系S 的主码Ks 相对应(基本关系R 和S 不一定是不同的关系),则对于R 中每个元组在F上的值必须为
• 或者取空值(F 的每个属性值均为空值);
• 或者等于S 中某个元组的主码值。
在例3–中,学生关系每个元组的”学院号”属性只能取下面两类值: (1)空值,表示尚未给该学生分配学院;
(2)非空值,被参照关系”学院号”中一定存在一个元组,它的主码值等于该参照关系” 学院号”中的外码值。
3. 用户定义完整性(User-defined Integrity)
用户定义的完整性是针对某一具体关系数据库的约束条件,使某一具体应用涉及数据必须满 足语义要求。
用户定义的完整性数据也称为域完整性或语义完整性,通过这些规则限制数据库只接受符合 完整性约束条件的数据值,不接受违反约束条件的数据,从而保证数据库的中数据的有效性和可 靠性。
按应用语义,属性数据有:
(1)类型与长度限制。
(2)取值范围限制。
如学生关系中”性别”数据只能是男或女,选课关系中”成绩”数据为1到100之间,等等。
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。关系代数是施加于关系上 的一组集合代数运算,关系代数的运算对象是关系,运算结果也是关系。
关系代数中的操作可以分为两类:
(1)传统的集合运算,如并、交、差、笛卡儿积。这类运算将关系看成元组的集合,运算时 从行的角度进行。
(2)专门的关系运算,如选择、投影、连接等。这些运算不仅涉及行而且也涉及到列。
关系代数使用的运算符:
(1)传统的集合操作: (并)、-(差)、 (交)、 (笛卡儿积)。 (2)专门的关系操作: (选择)、 (投影)、 (连接)、÷(除)。 (3)比较运算符:>(大于)、≥(大于等于)、<(小于)、≤(小于等于)、=(等于)、≠(不等于)。
(2)逻辑运算符: (与)、 (或)、 (非)。
第二部分会在以后的章节详细介绍