关系数据库

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

  1. 关系
    关系模型只包含单一的数据结构————关系(逻辑结构就是一张二维表),现实世界的实体以及实体间的各种联系均用关系来表示

  2. 域(domain):域是一组具有相同数据类型的值的集合。例如整数 ,实数等

  3. 笛卡尔积

    笛卡尔积是域上的一种集合运算,给定一组域D1,D2,…,Dn,允许其中某些域是相同的。所有域的所有取值的一个组合并且不能重复

    元组(Tuple):笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组、
    (张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨) 等 都是元组
    分量(Component):笛卡尔积元素(d1,d2,…,dn)中的每一个值di 叫作一个分量
    张清玫、计算机专业、李勇、刘晨等都是分量
    基数:一个域允许的不同的取值个数称为这个域的基数

    笛卡尔积的表示方法:笛卡尔积可表示为一张二维表,表中的每行对应一个元组,表中的每列对应一个域
    例如,给出3个域:

    1
    2
    3
    D1=导师集合SUPERVISOR={张清玫,刘逸}
    D2=专业集合SPECIALITY={计算机专业,信息专业}
    D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}

    D1,D2,D3的笛卡尔积为?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    D1×D2×D3={
    (张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
    (张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
    (张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
    (刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
    (刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
    (刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }

    基数为:2×2×3=12

    该笛卡尔积的基数为223=12,也就是说,D1D2D3一共有12个元组。这12个元组也可组成一张二维表

  4. 关系(relation)
    关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域
    候选码(Candidate key)
    若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
    简单的情况:候选码只包含一个属性

    全码(All-key)
    最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)

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

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

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

  6. 基本关系的性质
    (1)列是同质的(Homogeneous),即每一列中的分量是同一类型的数据,来自同一个域
    (2)不同的列可出自同一个域
    其中的每一列称为一个属性
    不同的属性要给予不同的属性名
    (3)列的顺序无所谓,列的次序可以任意交换
    (4)任意两个元组的候选码不能相同
    (5)行的顺序无所谓,行的次序可以任意交换

    分量必须取原子值,这是规范条件中最基本的一条

  7. 关系模式
    关系模式(Relation Schema)是型;关系是值
    定义:关系模式是对关系的描述
    关系模式可以形式化地表示为:

    1
    2
    3
    4
    5
    6
      R(U,D,DOM,F)
    R 关系名
    U 组成该关系的属性名集合
    D U 中属性所来自的域
    DOM 属性向域的映象集合
    F 属性间数据的依赖关系的集合

关系操作

  1. 基本的关系操作
    关系模型中常用的关系操作包括查询、插入、删除、修改两大部分
    其中查询操作是关系操作中最主要的部分,查询操作:选择、投影、连接、除、并、差、交、笛卡尔积
    其中选择、投影、并、差、笛卡尔基是5种基本操作

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

关系的完整性

关系模型中有三类完整性约束:实体完整性、参照完整性和用户自定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作关系的两个不变性

  1. 实体完整性
    规则2.1 实体完整性规则(Entity Integrity)
    若属性A是基本关系R 的主属性,则属性A不能取空值(主键不能为空
    空值就是“不知道”、“不存在”或“无意义”的值

    1
    2
    3
    例:选修(学号,课程号,成绩)
    “学号、课程号”为主码
    “学号”和“课程号”两个属性都不能取空值
  2. 参照完整性

    设F 是基本关系R 的一个或一组属性,但不是关系R 的码。如果F与基本关系S 的主码Ks相对应,则称F 是R 的外码
    基本关系R 称为参照关系(Referencing Relation)
    基本关系S 称为被参照关系(Referenced Relation)
    或目标关系(Target Relation

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

    1
    2
    3
    4
    5
    6
    例[2.1]  学生(学号,姓名,性别,专业号,年龄) 其中学号为‘学生’关系的主键
    专业(专业号,专业名) 其中专业号为‘专业’关系的主键

    [例2.1] 中学生关系中每个元组的“专业号”属性只取两类值:
    (1)空值,表示尚未给该学生分配专业
    (2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配一个不存在的专业
  3. 用户自定义的完整性
    针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求

    1
    2
    3
    4
    例: 课程(课程号,课程名,学分)
    “课程号”属性必须取唯一值
    非主属性“课程名”也不能取空值
    “学分”属性只能取值{1,2,3,4}

关系代数

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询


  1. 结果仍为n目关系,由属于 R 或属于 S 的元组组成


  1. 结果仍为n目关系,由属于 R 而不属于 S的所有元组组成


  1. 结果仍为n目关系,由既属于 R 又属于 S 的元组组成,注意与‘并’区分

  1. 笛卡尔积
    R: n 目关系,k1个元组
    S: m 目关系,k2个元组
    R × S
    列:(n+m)列元组的集合
    元组的前n 列是关系R的一个元组
    后m 列是关系S 的一个元组
    行:k1×k2个元组

  1. 专门的关系运算

    (1)选择



选择运算是从关系R 中选取使逻辑表达式F 为真的元组,是从行的角度进行的运算
(2)投影
关系 R 上的投影是从 R 中选择出若干属性列组成新的关系

(3)连接
连接运算的含义:从两个关系的笛卡尔积中选取属性间满足一定条件的元组
等值连接(equijoin):从关系R与S 的广义笛卡尔积中选取A、B属性值相等的那些元组
自然连接(Natural join):两个关系中进行比较的分量必须是相同的属性组,在果中把重复的属性列去掉



(4)外连接
如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接
左外连接(LEFT OUTER JOIN或LEFT JOIN)
只保留左边关系R 中的悬浮元组
右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
只保留右边关系S 中的悬浮元组

(5)除

1
2
3
4
5
6
7
8
在关系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的象集包含了S 在(B,C )属性组上的投影
所以 R÷S ={a1}