数据库概论第二章关系数据库
关系数据结构及形式化定义
关系模型由关系数据结构、 关系操作集合和关系完整性约束三部分组成。
关系数据结构
域
是一组具有相同数据类型的值的集合 。一个域允许的不同取值个数称为这个域的基数
笛卡儿积
是域上的一种集合运算。
元组
二维表中的一行元素。每一个元素(d1,d2,d3,…,dn) 叫作一个 n 元组 ( n-tuple ), 或简称元组( tuple)。
分量
元素中的每一个值di叫做一个分量( component )
(张清玫, 计算机专业, 李勇)、 ( 张清玫, 计算机专业, 刘晨) 等都是元组。 张清玫、计算机专业、 李勇、 刘晨等都是分量。
关系
当n=1 时, 称该关系为单元关系( unary relation), 或一元关系。
当 n=2 时, 称该关系为二元关系 ( binary relation).
关系是笛卡儿积的有限子集, 所以关系也是一张二维表, 表的每行对应一个元组, 表的每列对应一个域。 由于域可以相同, 为了加以区分, 必须对**每列起一个名字, 称为属性(attribute)**。 n 目关系必有 n 个属性。
若关系中的某一属性组的值能唯一地标识一个元组, 而其子集不能, 则称该属性组为候选码( candidate key).
若一个关系有多个候选码, 则选定其中一个为主码(primary key)。
候选码的诸属性称为主属性 ( prime attribute)。不包含在任何候选码中的属性称为非主属性( non-prime attribute) 或非码属性(non-key attribute)。
在最简单的情况下, 候选码只包含一个属性。 在最极端的情况下, 关系模式的所有属性是这个关系模式的候选码, 称为全码
关系可以有三种类型: 基本关系( 通常又称为基本表或基表)、 查询表和视图表。 其中, 基本表是实际存在的表, 它是实际存储数据的逻辑表示; 査询表是査询结果对应的表;视图表是由基本表或其他视图表导出的表, 是虚表, 不对应实际存储的数据。
关系模式
关 系 操 作
关系模型中常用的关系操作包括査询( query) 操作和插入( insert)、 删除( delete)、修改( update) 操作两大部分。
查询操作又可以分为选择(select)、 投影(project)、 连接(join)、 除(divide)、 并(union)、 差( except)、 交( intersection)、
笛卡儿积等。 其中选择、 投影、 并、 差、 笛卡儿积是 5 种基本操作
关系的完整性约束
关系模型中有三类完整性约束: 实体完整性( entity integrity)、 参照完整性( referentialintegrity) 和用户定义的完整性( user-efined integrity)。
实体完整性规则
简单来说,主码非空且唯一。 若属性( 指一个或一组属性)是基本关系及的主属性,**则不能取空值( null value)**。 所谓空值就是“ 不知道” 或“ 不存在” 或“无意义” 的值。
参照完整性:
在例 2.2 中, 选修关系的“ 学号” 属性与学生关系的主码“ 学号” 相对应: 选修关系的“ 课程号” 属性与课程关系的主码“ 课程号” 相对应, 因此“ 学号” 和“ 课程号” 属性是选修关系的外码。
简单来说,外码要么是别的表的主码,要么应该为NULL。
用户定义的完整性:
简单来说比如设定not null,unique,check等。
用户定义的完整性就是针对某一具体关系数据库的约束条件, 它反映某一具体应用所涉及的数据必须满足的语义要求。 例如某个属性必须取唯一值、 某个非主属性不能取空值等
例如, 在例 2.1 的学生关系中, 若按照应用的要求学生不能没有姓名, 则可以定义学生姓名不能取空值; 某个属性( 如学生的成绩), 的取值范围可以定义在 0~100之间等。
关系代数
传统的集合运算
传统的集合运算是二目运算, 包括并、 差、 交、 笛卡儿积 4 种运算
专门的关系运算
专门的关系运算包括选择、 投影、 连接、 除运算等。
选择
投影
连接
等值连接: 它是从关系R与 S 的广义笛卡儿积中选取A,B属性值相等的那些元组,
自然连接:是一种特殊的等值连接 。 它要求两个关系中进行比较的分量必须是同名的属性组且把重复的属性列给去掉
悬浮元组:这些被舍弃的元组称为悬浮元组( dangling tuple)。
外连接:如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接。
左外连接:如果只把左边关系R中要舍弃的元组保留就叫做左外连接(LEFT OUTER JOIN或LEFT JOIN)。
右外连接:如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN或RIGHT JOIN)。
除运算
象集:本质上是一次选择行的运算和一次选择列的运算。
求a1在表A中的象集,就是先选出所有R属性中a=a1的那些行,然后选择出不包含a1的那些列。
举个例子,
同理
除法运算三步:
1.找出表R中与S属性相同的那些列,此时可以看出B,C列是相同的属性的列,所以把B,C列抽出来:
2.求表R中各个元素a对应的象集(在上面已经求出)
3.找出所有的a值,要求满足表S的B,C列是a的象集的子集,即R/S的结果