三、关系数据库

主要内容

  • 关系模型的基本概念
  • 关系代数
  • 关系演算
    • 元组关系演算
    • 域关系演算
  • 关系数据语言
  • 关系运算的安全性
  • 关系运算的等价性
  • 小结

1.关系模型的基本概念

  • 关系模型的数据结构
    • 关系
    • 现实世界的实体以及实体间的各种联系均用关系来表示
  • 关系模型的逻辑结构
    • 二维表
    • 从用户角度,关系模型中数据的逻辑结构是一张二维表
  • 关系模型的数学基础
    • 集合代数

关系的定义

  • 笛卡尔积(Cartesian Product)

    给定一组集合D1,D2,……,Dn(可以有相同的),其笛卡尔积定义为:D1×D2×……×Dn={(d1,d2,……,dn)∣di∈Di,i=1,2,……,n}D_1 \times D_2 \times …… \times D_n = \{(d_1,d_2,……,d_n)|d_i \in D_i,i = 1,2,……,n\}D1×D2×……×Dn={(d1,d2,……,dn)diDi,i=1,2,……,n}

    例如:

    D1=1,2,3,D2=a,b,D1×D2={(1,a),(1.b),(2,a),(2,b),(3,a),(3,b)}.D_1 = {1,2,3},D_2 = {a,b},\\ \quad D_1 \times D_2 = \{ (1,a),(1.b),\\ \quad\quad\quad\quad\quad(2,a),(2,b),\\ \quad\quad\quad\quad\quad(3,a),(3,b) \}.D1=1,2,3,D2=a,b,D1×D2={(1,a),(1.b),(2,a),(2,b),(3,a),(3,b)}.

  • 元组(Tuple)

    • 笛卡尔积中每一个元素(d1,d2,……,dn)叫作一个n元组(n-tuple)或简称元组
  • 分量(Component)

    • 笛卡尔积中的元素(d1,d2,……,dn)中的第di值叫作第i个分量
  • 域(Domain)

    • 第i个分量di的取值范围Di,称这个分量的**(值)域**。
    • 是一组具有相同数据类型的值的集合。
    • 整数,实数,介于某个取值范围的整数。
  • 基数(Cardinal number)

    • Di(i=1,2,……,n)D_i(i=1,2,……,n)Di(i=1,2,……,n)为有限集,其基数为mi(i=1,2,……,n)m_i(i=1,2,……,n)mi(i=1,2,……,n),则D1×D2×……×DnD_1 \times D_2 \times …… \times D_nD1×D2×……×Dn的基数M为:M=∏i=1nmiM=\prod_{i=1}^n m_iM=i=1nmi
  • 笛卡尔积的表示方法

    • 笛卡尔积可表示为一个二维表;表中的每行对应一个元组,表中的每列对应一个域
  • 笛卡尔积示例

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

    image-20250517125503483

    说明:

    1. 元组(Tuple)

      每一行都是一个3元组,例如:(张清政,计算机专业,李勇)(张清政,计算机专业,李勇)(张清政,计算机专业,李勇)

      这个元组是从:

      • SUPERVISOR 中取“张清政”
      • SPECIALITY 中取“计算机专业”
      • POSTGRADUATE 中取“李勇”
    2. 分量(Component)

      在这个元组:

      • “张清政”是第1个分量(来自D1D_1D1
      • "计算机专业"是第2个分量(来自D2D_2D2
      • “李勇”是第3个分量(来自D2D_2D2
    3. 域(Domain)

      每一列(SUPERVISOR,SPECIALITY,POSTGRADUATE)表示一个域(Domain),即值的取值范围:

      • 第1列:SUPERVISOR 域:{张清政,刘逸}
      • 第2列:SPECIALITY 域:{计算机专业,信息专业}
      • 第3列:POSTGRADUATE 域:{李勇,刘晨,王敏}
    4. 基数(Cardinal Number)

      每个集合的元素个数是:

      • ∣D1∣=2|D_1| = 2D1=2
      • ∣D2∣=2|D_2| = 2D2=2
      • ∣D3∣=3|D_3| = 3D3=3

      因此笛卡尔积的基数(总元组数)为:

      M=∣D1∣×∣D2∣×∣D3∣=2×2×3=12M = |D_1| \times |D_2| \times |D_3| = 2 \times 2 \times 3 = 12M=D1×D2×D3=2×2×3=12

      我们可以数一下表格,共有12行元组,正好验证了这个计算。

    5. 笛卡尔积表示法

      笛卡尔积可以用一个表格来表示

      • 每一行是一个元组
      • 每一列对应一个域(属性)
      • 表格的行数等于笛卡尔积的基数(即所有组合情况)
  • 关系(Relation)

    • D1×D2×……×DnD_1 \times D_2 \times …… \times D_nD1×D2×……×Dn的子集成为D1,D2,……,DnD_1,D_2,……,D_nD1,D2,……,Dn上的关系,表示为:

      R(D1,D2,……,Dn)R:关系名n:关系的目或度(Degeree)集合D1,D2,……,Dn称为关系的域R(D_1,D_2,……,D_n)\\R:关系名 \quad \quad\quad\quad\quad \\ \quad \quad n:关系的\textcolor{red}{目或度(Degeree)} \\ \quad \quad \quad \quad \quad \quad集合D_1,D_2,……,D_n称为关系的域R(D1,D2,……,Dn)R:关系名n:关系的目或度(Degeree)集合D1,D2,……,Dn称为关系的域

    • 一元关系:n=1n = 1n=1

    • 二元关系:n=2n = 2n=2

    • nnn元关系

  • 关系的表示

    • 关系也是一个二维表;
  • 关系的元组和属性

    • 关系中的每一行对应一个元组,通常用ttt表示;
    • 关系中的每一列对应一个
    • 关系中的列称为属性,每一列用属性名表示;
    • t[Ai]t[A_i]t[Ai]表示元组ttt在属性AiA_iAi上的值;
    • 用符号dom(Ai)dom(A_i)dom(Ai)表示属性AiA_iAi的域。
  • 关系的特殊性

    • 并非任何笛卡尔积的子集都有现实意义;

    • 关系元组的各个分量的次序是无关紧要的;

      (为关系的每个列附加一个属性名以取消其有序性

    • 数学上的关系可以无限,但关系数据库中无限关系是无意义的,关系必须是有限元组的集合;

    • 关系是简单的二维表,每一列都是不可分的;

    • 严格的说,关系是一种规范化了的二维表行的集合

    • 示例:

      (d1,……,di,dj,……,dn)=(d1,……,dj,di,……,dn),(i,j−1,2,……,n)(d_1,……,d_i,d_j,……,d_n) = (d_1,……,d_j,d_i,……,d_n),(i,j - 1,2,……,n)(d1,……,di,dj,……,dn)=(d1,……,dj,di,……,dn),(i,j1,2,……,n)

      这表明次序是无意义的

      姓名={张三,李四},性别={男,女};姓名×性别={(张三,男),(张三,女),(李四,男),(李四,女)}姓名=\{张三,李四\},性别=\{男,女\};\\姓名 \times 性别 = \{ (张三,男),(张三,女),(李四,男),(李四,女)\}姓名={张三,李四},性别={男,女};姓名×性别={(张三,男),(张三,女),(李四,男),(李四,女)}

规范化的关系

满足以下性质的关系,称为规范化的关系

  1. 列是同质的
    • 每一列中的值是同一类型的数据,来自同一个域。
  2. 不同的列可出自同一个域
    • 每一列称为一个属性,不同的属性要给与不同的属性名。
  3. 列的次序是无关紧要的
    • 列的次序可以任意交换
  4. 元组的每个分量都是原子的
    • 每一个分量都必须是不可分的数据项。
  5. 元组的次序是无关紧要的
    • 行的顺序无所谓,即行的次序可以任意交换
  6. 各个元组都是不同的
    • 关系中不允许出现重复元组

实际的商品化的数据库管理系统不一定都满足这些规范化要求

  • 有的允许重复元组;
  • 有的区分元组的顺序和属性的次序;

关系与关系模式

  • 关系的称为关系模式(Relation Schema)

    • 是对关系的描述,该描述包括关系名、属性名、属性的类型和长度,以及属性间固有的数据关联关系

    • 关系模式一般简记为关系名和属性名的集合

      R(A1,A2,……,An)R(A_1,A_2,……,A_n)R(A1,A2,……,An),或仅用关系名RRR表示。

    • 例如:图书关系模式:图书(书号,书名,作者,单价,出版社)图书(书号,书名,作者,单价,出版社)图书(书号,书名,作者,单价,出版社)或简写为图书关系图书关系图书关系

  • 关系的是元组的集合,称为关系

    • 关系是对现实世界中事物在某一时刻状态的反映,关系的值是随时间在不断变化的。
    • 关系模式RRR上的一个关系通常写为r(R)r(R)r(R)
  • 关系模式的形式化表示

    R(U,D,DOM,F)R(U,D,DOM,F)R(U,D,DOM,F)

    RRR 关系名

    UUU 组成该关系的属性名集合

    DDD 属性组UUU中属性所来自的域

    DOMDOMDOM 属性向域的映射集合

    FFF 属性间的数据依赖关系集合

    例子:

    STUDENT(U,D,DOM,F)U{sno,name,age}D{char,Int}DOM{dom(sno)=dom(name)=char,dom(age)=Int}F{sno−>name,ano−>age}STUDENT(U,D,DOM,F)\\U\{sno,name,age \} \quad \quad \quad \quad\\D\{ char,Int\}\quad \quad \quad \quad \quad \quad \quad\\DOM\{dom(sno) = dom(name) = char,dom(age) = Int\}\\F\{sno->name,ano->age\}STUDENT(U,D,DOM,F)U{sno,name,age}D{char,Int}DOM{dom(sno)=dom(name)=char,dom(age)=Int}F{sno>name,ano>age}

关系数据库与关系数据库模式

  • 关系模式的集合称为关系数据库模式

    • 是对数据库中所有数据逻辑结构的描述(关系数据库的型

    • 表示为

      R={R1,R2,……,Rp}\quad \quad \quad R = \{R_1,R_2,……,R_p\}R={R1,R2,……,Rp}

  • 关系数据库

    • 关系数据库模式中每个关系模式上的关系的集合称为关系数据库。(关系数据库的值

    • 表示为

      d={r1,r2,……,rp}\quad \quad \quad d = \{r_1,r_2,……,r_p\}d={r1,r2,……,rp}

关系模式和关系往往统称为关系,通过上文加以区别

键(Key)

  • 键(Key,码)

  • 关系数据库的重要概念

  • 关系是元组的集合,为了区分不同元组,用其中一个或多个属性值来标识元组;能够唯一标识元组的属性或属性组称为关系的键

  • 属性集KKK关系模式RRR 的键,对r(R)r(R)r(R)中任意二个不同的元组t1,t2t_1,t_2t1,t2应满足t1[K]≠t2[K]t_1[K] \ne t_2[K]t1[K]=t2[K],即任意二个不同的元组其KKK的值是不同的。

  • 键的形式化定义

    设关系模式R(U),K⊆UR(U),K \subseteq UR(U),KUrrrRRR上的任一关系,若对rrr中的任意二个不同的元组满足:

    1. t1[K]≠t2[K]t_1[K] \ne t_2[K]t1[K]=t2[K]
    2. 不存在$K’\subset K 而使得而使得而使得t_1[K’] \ne t_2[K’]$成立;

    则称KKKRRR

    若仅条件1成立,则称KKKRRR超键(Super Key)

    • 键除了能表示元组外,还应具有最小属性数。
    • 超键不要求具有最有属性数。
    • 超键包括了键。
  • 候选键(Candidate Key)

    • 关系中能起到标识作用的键(可能有多个
  • 主键(Primary Key与候补键(Candidate Key)

    • 若一个关系有多个候选键,则选定其中一个作为主键;其余的键称为候补键。
  • 联合键(Concatenated Key)

    • 由关系的多个属性组成的键
  • 全键(All Key)

    • 由关系的所有属性组成的键
  • 候选键的属性称为主属性(Prime attribute),不包含在任何候选键中的属性称为非主属性非键属性(Non-key attribute)

  • 外键(Foreign Key)

    • 当前关系的某个属性是另外一个关系,则称这个属性为当前关系的外键
    • 给出了在不同关系间建立联系的一种方法;
    • 外键并不一定要与相应的主键同名
    • 当外键与相应的主键属于不同关系时,往往取相同的名字,以便于识别。
  • 示例:关系的键

    下划线的是主键候选键全键联合键

    学生关系S(学号‾,学生姓名,年龄,性别,班号)学生关系S(\underline{学号},学生姓名,年龄,性别,班号)学生关系S(学号,学生姓名,年龄,性别,班号)

    班级关系C(班号‾,班长,学生人数,专业)班级关系C(\underline{班号},班长,学生人数,专业)班级关系C(班号,班长,学生人数,专业)

    学生选课关系SC(学号,课程号‾,成绩)学生选课关系SC(\underline{学号,课程号},成绩)学生选课关系SC(学号,课程号,成绩)

    用户关系U(身份证‾,姓名,性别,年龄)用户关系U(\underline{身份证},姓名,性别,年龄)用户关系U(身份证,姓名,性别,年龄)

    供应关系Suppl(供应商,商品,商场‾)供应关系Suppl(\underline{供应商,商品,商场})供应关系Suppl(供应商,商品,商场)

关系的完整性约束

  • 为了维护数据库中的数据与现实世界的一致性,关系模式上的所有关系必须满足一定的完整性约束条件。

    • 属性取值的约束
    • 属性间值的约束
    • 不同关系中属性值的约束
    • …………
  • 完整性约束语义上的概念,是**现实世界对数据的限定**。

    • 实体完整性约束
    • 参照完整性约束
    • 其他约束(用户定义的完整性约束)
  • 实体完整性和参照完整性

    • 关系模型必须满足的完整性约束条件,称为关系的两个不变性
    • 由关系系统自动支持;
  • 用户定义的完整性

    • 应用领域需要遵循的约束条件;
    • 体现了具体领域中的语义约束。
  • 实体完整性约束(Entity Integrity Constraint)

    • 对关系中主键取值的约束
    • 作为键的各个属性的值不能为空
    • 主键的值不能为空火或部分为空,否则不能表示任何实体,因而无意义。
    • 空值:”不知道“,”不存在“或”无意义“的值。
  • 参照完整性约束(Reference Integrity Constraint)

    • 对关系中外键取值的约束
    • 若关系 R1R_1R1 中的属性 AAA 是另一个关系 R2R_2R2 中主键的主键
      R1R_1R1 中任意一个元组在属性 AAA 上的值
      • 要么是空值(NULL)——允许没有对应值的情况(如果允许空)
      • 要么必须是R2R_2R2中某个元组主键属性的值(即存在于R2R_2R2的主键集合中)
  • 参照完整性约束

    • 给出了关系间建立联系的约束规则:参照

    • 参照:某个关系与另一个关系通过定义在同一个域上的属性而建立的联系。

    • 参照关系

      例:R1R_1R1,包含外键

    • 被参照关系

      例:R2R_2R2,主键

    • 规定了外键的取值:

      1. 空值;
      2. 被参照关系中某个元素的主键的值。
  • 参照完整性示例

    示例1

    image-20250517155451951

    image-20250517155515634

    示例2:学生实体及其内部的领导联系(一对多)

    学生(学号‾,姓名,性别,专业好,年龄,班长)学生(\underline{学号},姓名,性别,专业好,年龄,\textcolor{red}{班长})学生(学号,姓名,性别,专业好,年龄,班长)

    ”班长“属性值可以取空值或非空值

  • 其他约束(用户定义的完整性约束)

    • 是用户根据实际应用定义的完整性约束
    • 与具体的数据库应用系统有关
    • 这种约束时应用语义层面的需求,用来保证数据在业务逻辑上是合理的。比如:”病人的年龄不能超过150岁“
    • DBMS应提供定义和检查机制,不应由应用程序承担

    示例:

    课程(课程号‾,课程名,学分)课程(\underline{课程号},课程名,学分)课程(课程号,课程名,学分)

    用户定义的完整性约束如下:

    1. ”课程名“属性必须取唯一值;
    2. 非主属性”课程名“也不能取空值;
    3. ”学分“属性只能取值{1,2,3,4}\{1,2,3,4\}{1,2,3,4}
  • 完整性约束的实施

    • 关系系统自动支持:实体完整性,参照完整性
    • 用户定义后由系统支持:用户定义的完整性

关系与关系模式(小结)

  • 关系模式是

    举例:Student(Sno,Sname,Age)Student(Sno,Sname,Age)Student(Sno,Sname,Age)就是一个关系模式,说明这个表有3个属性,分为对应不同的数据类型。

  • 关系是,是关系模式的具体示例,就像int是类型,3是值

    举例:StudentStudentStudent表中所有学生的真实数据(每一行一个学生)组成了关系

  • 关系模式是对关系的描述

    • 元组集合的结构

      • 属性的构成:有哪些属性,例如Sno,Sname,AgeSno,Sname,AgeSno,Sname,Age
      • 属性来自的域:例如SnoSnoSno来自”学号字符串“域,AgeAgeAge来自”整数域“。
      • 属性与域之间的映射关系:每个属性必须严格从它所属的域中取值。
    • 元组语义以及完整性约束条件

    • 属性间的数据依赖关系 集合

      例如:若A→B,则A的值能唯一决定B的值若A \rightarrow B,则A的值能唯一决定B的值AB,则A的值能唯一决定B的值

  • 关系模式

    • 对关系的描述
    • 静态的、稳定的
  • 关系

    • 关系模式在某一时刻的状态或内容
    • 动态的、随时间不断变化的
  • 关系模式和关系往往统称为关系

    通过上下文加以区别

2. 关系代数

主要内容

  • 关系运算概述
  • 关系代数概述
  • 传统的集合运算
  • 专门的关系运算
  • 扩充的关系运算
  • 举例
  • ISBL语言

关系运算概述

  • 关系模型对数据的各种操作都可以归结为对关系的运算;给出运算表达式就可得到所需要的结果。

  • 关系运算的分类

image-20250518161857943

关系代数概述

  • 关系代数
    • 以集合代数为基础发展起来的,以关系运算对象的一组运算集合;
    • 一种抽象的查询语言,用对关系的运算来表达查询;
    • 运算对象和运算结果都是关系;
  • 关系代数运算的分类:
    • 传统的集合运算
      • 并、差、交、广义笛卡尔积
      • 把关系看成元素的的集合,以元组作为集合中元素来进行运算
    • 专门的关系运算
      • 选择、投影、连接、除
    • 扩充的关系运算(为数据库的应用而引进的特殊运算)

传统的集合运算——并

  • RRRSSS

    • 具有相同的目nnn(即两个关系都有nnn个属性)
    • 相应的属性取自同一个域
  • R∪SR \cup SRS

    • 仍未nnn目关系,由属于RRR或属于SSS的元组组成

      $R \cup S={t|t \in R \land t \in S} $

      image-20250517200704399

传统的集合运算——差

  • RRRSSS

    • 具有相同的目nnn
    • 相同的属性取自同一个域
  • R−SR - SRS

    • 仍为nnn目关系,由属于RRR而不属于SSS的所有元组组成

      Q=R−S={t∣t∈R∧t∉S}Q = R - S = \{t|t \in R \land t\notin S \}Q=RS={ttRt/S}

      image-20250517201124047

传统的集合运算——交

  • RRRSSS

    • 具有相同的目nnn
    • 相应的属性取自同一个域
  • R∩SR \cap SRS

    • 仍为nnn目关系,由既属于RRR又属于SSS的元组组成

      R∩S={t∣t∈R∧t∈S}R∩S=R−(R−s)R \cap S = \{t|t \in R \land t \in S\}\\R \cap S = R - (R - s) \quad \quadRS={ttRtS}RS=R(Rs)

      image-20250517201650303

传统的集合运算——笛卡尔积

  • 关系RRRSSS的笛卡尔积为RRR中所有元组和SSS中所有元组的拼接

  • RRRnnn目关系,k1k_1k1个元组

  • R×SR \times SR×S

    • R×S={trts∣tr∈R∧ts∈S}R \times S = \{t_rt_s |t_r \in R \land t_s \in S\}R×S={trtstrRtsS}

    • 元组的前nnn列是关系RRR的一个元组,后mmm列是关系SSS的一个元组

    • k1×k2k_1 \times k_2k1×k2(n+m)(n+m)(n+m)列的元组的集合

      image-20250517202257833

专门的关系运算——选择(Selection)

  • 选择运算是关系上的一元运算,是从关系中选择满足一定条件的元组子集

    σF(R)={t∣t∈R∧F(t)}\sigma_F(R) = \{t|t \in R \land F(t)\}σF(R)={ttRF(t)}

    • FFF是限定条件的布尔表达式,由逻辑算符(∧、∨、¬)(\wedge、\vee、\lnot )(¬)连接比较表达式组成

    • 上式表示在关系RRR中选择使F(t)F(t)F(t)为真的所有元组

    • 选择运算是从**行的角度**进行的运算

      image-20250517203421444

  • 选择操作示例

    假设由如下表

    学生关系(Student)(Student)(Student)

    学号Sno 姓名Sname 性别Ssex 年龄Sage 所在系Sdept
    95001 李勇 20 CS
    95002 刘晨 19 IS
    95003 王敏 18 MA
    95004 张力 19 IS

    进行如下操作

    image-20250517203753281

专门的关系运算——投影(Projection)

  • 在模式RRR上的投影运算表示为

    ΠX(R)={t[X]∣t∈R}\Pi_X(R) = \{t[X] \quad |t \in R \}ΠX(R)={t[X]tR}

    • Π\PiΠ是投影算符,XXX是模式RRR属性的子集,t[X]t[X]t[X]表示RRR中元组在属性集XXX上的值,或为元组tttXXX上的投影

    • 结果:从RRR中选择出若干属性列组成新的关系

    • 投影操作主要是从**列的角度**进行运算

      image-20250517204729979

  • 投影操作示例

    假设有学生关系

    学号Sno 姓名Sname 性别Ssex 年龄Sage 所在系Sdept
    95001 李勇 20 CS
    95002 刘晨 19 IS
    95003 王敏 18 MA
    95004 张力 19 IS

    查询学生的姓名和所在系,即求StudentStudentStudent关系上学生姓名和所在系两个属性上的投影:

    1. ΠSname,Sdept(Student)\Pi_{Sname,Sdept}(Student)ΠSname,Sdept(Student)的结果为
image-20250518161640987
  1. ΠSdept(Student)\Pi_{Sdept}(Student)ΠSdept(Student)的结果为

    image-20250517205117295

专门的关系运算——连接(Join)

  • 连接运算是把二个关系中的元组按条件连接起来,形成一个新关系

    • 条件连接
    • 自然连接
  • 条件连接也称θ\thetaθ连接,是将二个关系中满足θ\thetaθ条件元组拼接起来形成新元组的集合。

    • 设属性AAABBB分别是RRRSSS的连接记为:

      R⋈A θ BS={ t∣=tr ts,  tr∈R∧ts∈S∧tr[A]  θ  ts[B]}R \bowtie_{A \, \theta \, B}S = \left\{\, t \mid = t_r \, t_s, \; t_r \in R \land t_s \in S \land t_r[A] \; \theta \; t_s[B] \right\}RAθBS={t∣=trts,trRtsStr[A]θts[B]}

      ⋈\bowtie是连接符,A θ BA\, \theta \, BAθB为连接条件,θ\thetaθ是比较符。

  • 条件连接示例

    假设有接下来的RRR关系和SSS关系

    image-20250517210958443

    然后进行R ⋈C<ESR\, \bowtie_{C<E}SRC<ES ,那么结果为

    image-20250517211213660

  • 条件连接的转换

    • RRRSSS的笛卡尔积R×SR\times SR×S中选取RRR关系在AAA属性组上的值与SSS关系在BBB属性组上的值满足比较条件的元组

      R⋈A θ BS=σA θ B(R×S)R \bowtie_{A\, \theta \, B}S= \sigma_{A \, \theta \, B}(R \times S)RAθBS=σAθB(R×S)

  • 等值连接,最常用的连接

    • 连接条件是二个属性值的相等比较;
    • θ\thetaθ为”=“的连接运算称为等值连接
  • 等值连接示例

    假设有接下来的RRR关系和SSS关系

image-20250518161517468

然后进行R⋈R.B=S.BSR \bowtie_{R.B = S.B}SRR.B=S.BS,那么结果为

image-20250517212016430

  • 自然连接(Natural join)

    • 自然连接是一种特殊的等值连接;它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉

      比如:自然连接  R⋈S自然连接\;R \bowtie S自然连接RS

      image-20250517212554774

  • 一般的连接操作是从行的角度进行运算。

    image-20250517212747200

  • 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

专门的关系运算——除法(Division)

  • 象集

    给定一个关系R(X,Z)R(X,Z)R(X,Z)XXXZZZ为属性组。当t[X]=xt[X] = xt[X]=x时,xxxRRR中的象集(Image Set)为:

    Zx={t[Z]∣t∈R,t[X]=x}\qquad \qquad Z_x = \{t[Z] \mid t \in R , t[X] = x \}Zx={t[Z]tR,t[X]=x}

    它表示RRR中属性组XXX上值为xxx的诸元组在ZZZ分量上的取值的集合。

  • 象集示例

    image-20250518094837845

    • x1x_1x1RRR中的象集

      Zx1={Z1,Z2,Z3}Z_{x1} = \{Z_1,Z_2,Z_3\}Zx1={Z1,Z2,Z3}

    • x2x_2x2RRR中的象集

      Zx2={Z2,Z3}Z_{x2} = \{Z_2,Z_3 \}Zx2={Z2,Z3}

    • x3x_3x3RRR中的象集

      Zx3={Z1,Z3}Z_{x3} = \{Z_1,Z_3 \}Zx3={Z1,Z3}

  • 除法

    给定关系R(X,Y)R(\textcolor{red}X,\textcolor{cornflowerblue}Y)R(X,Y)S(Y,Z)S(\textcolor{cornflowerblue}Y,Z)S(Y,Z),其中X,Y,ZX,Y,ZX,Y,Z为属性组,RRR中的YYYSSS中的YYY可以有不同的属性名,但必须出自相同的域集。RRRSSS的除运算得到一个新的关系P(X)\textcolor{red}{P(X)}P(X)PPPR\textcolor{red}RR中满足下列条件的元组XXX属性列上的投影:

    元组在XXX分量上的值xxx的象集YxY_xYx包含SSSYYY上投影的集合。

    即:R÷S={tr[X]∣tr∈R∧ΠY(S)∈YX}R \div S = \left \{ t_r[X] \mid t_r \in R \land \Pi_Y(S) \in Y_X \right \}R÷S={tr[X]trRΠY(S)YX}

  • 除法示例

    image-20250518100423484

    在关系RRR中,AAA可以取四个值{a1,a2,a3,a4}\{a_1,a_2,a_3,a_4 \}{a1,a2,a3,a4}

    a1的象集为{(b1,c2),(b2,c3),(b2,c1)}a_1的象集为\{(b_1,c_2),(b_2,c_3),(b_2,c_1) \} a1的象集为{(b1,c2),(b2,c3),(b2,c1)}

    a2的象集为{(b3,c7),(b2,c3)}a_2的象集为\{(b_3,c_7),(b_2,c_3)\}a2的象集为{(b3,c7),(b2,c3)}

    a3的象集为{(b4,c6)}a_3的象集为\{(b_4,c_6) \}a3的象集为{(b4,c6)}

    a4的象集为{(b6,c6)}a_4的象集为\{(b_6,c_6)\}a4的象集为{(b6,c6)}

    SSS(B,C)(B,C)(B,C)上的投影为

    {(b1,c2),(b2,c1),(b2,c3)}\{(b_1,c_2),(b_2,c_1),(b_2,c_3)\}{(b1,c2),(b2,c1),(b2,c3)}

    只有a1a_1a1的象集包含了SSS(B,C)(B,C)(B,C)属性组,所以

    R÷S={a1}R \div S = \{a_1 \}R÷S={a1}

  • 除法运算的结果属性是RRR的属性中去掉与SSS相同的属性后剩下的其它属性。

    image-20250518101433026

  • 除操作是同时从行和列角度进行运算

image-20250518161115284 ### 扩充的关系运算——属性重名名
  • rrr是模式RRR上的一个关系,AAARRR中的一个属性,BBB为属性名,BBB不是RRR中的属性,BBBAAA具有相同的域。设R′=(R−A)∪BR' = (R - A) \cup BR=(RA)B,则属性AAA被重命名为BBB后,得到的关系r′r'r记为:r′(R′)=δA→B(r)r'(R') = \delta_{A \rightarrow B}(r)r(R)=δAB(r)

  • 重命名后的关系r′r'r可表示如下:

    r′(R′)={t′∣t′∈r′∧t∈r∧t′[R−A]=t[R−A]∧t′[B]=t[A]}r'(R') = \{t' \mid t' \in r' \land t \in r \land t'[R-A] = t[R-A] \land t'[B] = t[A] \}r(R)={ttrtrt[RA]=t[RA]t[B]=t[A]}

  • 重命名运算可以作用于一组属性

  • 通过属性重命名运算,可以

    • 做同一个关系的笛卡尔积
    • 在同一个关系上做自然连接运算
    • 将两个关系的等值连接方便地表示为自然连接
  • 例:把学生关系中的学号和姓名SnoSnoSnoSnameSnameSname重命名为Sno′Sno'SnoSname′Sname'Sname

    δSno,Sname→Sno′,Sname′(Student)\delta{Sno,Sname \rightarrow Sno',Sname'}(Student)δSno,SnameSno,Sname(Student)

扩充的关系运算——外连接

  • 连接运算是把二个关系中的元组按条件连接起来,结果为满足条件的元组集合,这样的连接称为内连接(inner join),还有一种连接称为外连接

  • **外连接(outer join)**是对自然连接运算的扩展。外连接结果中除了满足连接条件的元组外还包含没有被连接的元组。

  • 外连接分

    • 左外连接
    • 右外连接
    • 完全外连接
  • 左外连接

    • R⋈LSR \bowtie_L SRLS

    • 连接结果中包含了关系R(左边关系)R(左边关系)R(左边关系)中不满足连接条件的元组,在这些元组对应关系SSS属性上的值为空值。

    • RRR中任意元组,若SSS中找不到匹配的元组,则SSS用空元组与之对应;RRR的信息在左外连接的结果中都得到保留。

      image-20250518110458505

  • 右外连接

    • R⋈RSR \bowtie_R SRRS

    • 连接结果中包含了关系S(右边关系)S(右边关系)S(右边关系)中不满足连接条件的元组,在这些元组对应关系RRR属性上的值为空值。

    • SSS中任意元组,若RRR中找不到匹配的元组,则RRR用空元组与之对应。SSS的信息在右外连接的结果中都得到保留。

      image-20250518110840516

  • 完全外连接

    • R⋈FSR \bowtie_FSRFS

    • 连接结果中包含了关系RRR中不满足连接条件的元组,同时也包含了关系SSS中不满足连接条件的元组;即连接结果时左外连接和右外连接结果的并。

  • 关系代数的连接运算

    image-20250518111440671

    自然连接属于内连接

关系代数表达式

  • 关系代数运算

    • 关系代数运算

      并、差、交、笛卡尔积、投影、选择、连接、除

    • 基本运算

      并、差、交、笛卡尔积、投影、选择

    • 交、连接、除法可以用5钟基本运算来表达

      $R \cap S = R - (R - S) $

      $R \bowtie_{A, \theta , B}S = \sigma_{A, \theta , B}(R \times S) $

      $R \div S = \Pi_X® - \Pi_X((\Pi_X® \times \Pi_Y(S) - R) $

      XXXRRR中除去与SSS相同属性YYY之后的其余属性

  • 关系代数表达式

    • 关系代数运算经过有限次符合而形成的表达式,称为关系代数表达式。
    • 用关系代数表达式可以表示对数据库的各种操作
      • 检索(查询)
      • 插入
      • 删除
      • 修改(先删除,再插入)
  • 以关系代数运算为基础的数据子语言可以实现对数据库的所有查询和更新操作。关系代数的这种处理能力称为关系的完备性

  • 针对特定操作的关系代数表达式并不唯一。

关系代数对数据库操作示例

假设有如下表

S表

Sno Sname Sage Ssex Sdept
200701 刘明亮 18 计算机
200702 李和平 17 外语
200703 王茵 21 计算机
200704 张小芳 20 数学

SC表

Sno Cno Grade
200701 C1 85
200701 C2 70
200701 C3 78
200702 C1 81
200702 C2 84
200703 C2 75
200703 C3 90

C表

Cno Cname Cdept
C1 C语言 计算机
C2 英语 外语
C3 数据库 计算机
C4 数学 数学
  • 检索计算机系学生的学号和姓名

    ΠSno,Sname(σSdept=′计算机′(S))\Pi_{Sno,Sname}(\sigma_{Sdept = '计算机'}(S))ΠSno,Sname(σSdept=计算(S))

    Sno Sname
    200701 刘明亮
    200703 王茵
  • 检索选修了C1C1C1课的学生信息。

    ΠSno(σCno=′C1′(SC))⋈S\Pi_{Sno}(\sigma_{Cno = 'C1'}(SC)) \bowtie SΠSno(σCno=C1(SC))S

    Sno Sname Sage Ssex Sdept
    200701 刘明亮 18 计算机
    200702 李和平 17 外语
  • 检索不选C1C1C1课的学生信息。

    S−( ΠSno(σCno=′C1′(SC)) ⋈S)S - ( \, \Pi_{Sno}(\sigma_{Cno = 'C1'}(SC)) \, \bowtie S)S(ΠSno(σCno=C1(SC))S)

    Sno Sname Sage Ssex Sdept
    200703 王茵 21 计算机
    200704 张小芳 20 数学
  • 检索选秀了全部课程的学生的学号

    ΠSno,Cno(SC)÷ΠCno(C)\Pi_{Sno,Cno}(SC) \div \Pi_{Cno}(C)ΠSno,Cno(SC)÷ΠCno(C)

    ∅\emptyset空集

  • 插入学号为200701200701200701的学生选修了C4C4C4课、成绩为888888分的选课记录。

    ​ $SC , \cup , {‘200701’,‘C4’,88 } $

    Sno Cno Grade
    200701 C1 85
    200701 C2 70
    200701 C3 78
    200701 C4 88
    200702 C1 81
    200702 C2 84
    200703 C2 75
    200703 C3 90
  • 删除学生刘明亮选秀的英语课。

    SC−(ΠSno(σSname=′刘明亮′(S)) ⋈ SC ⋈ ΠCno(σCname=′英语′(C))SC - (\Pi_{Sno}(\sigma_{Sname='刘明亮'}(S)) \, \bowtie \, SC \, \bowtie \, \Pi_{Cno}(\sigma_{Cname='英语'}(C))SC(ΠSno(σSname=刘明(S))SCΠCno(σCname=(C))

    Sno Cno Grade
    200701 C1 85
    200701 C3 78
    200701 C4 88
    200702 C1 81
    200702 C2 84
    200703 C2 75
    200703 C3 90
  • 检索与李勇在同一个系的学生的学号和姓名(假设有李勇这个人在表中)

    方式一:

    采用属性重命名

    image-20250518132001181

    ΠSno′,Sname′(σSname=′李勇′(S ⋈ δSno,Sname,Sage,Ssex → Sno′,Sname′,Sage′,Ssex′(S)))\Pi_{Sno',Sname'}( \\ \sigma_{Sname='李勇'}(S\, \bowtie \\ \, \delta_{Sno,Sname,Sage,Ssex \, \rightarrow \, Sno',Sname',Sage',Ssex'}(S)))ΠSno,Sname(σSname=(SδSno,Sname,Sage,SsexSno,Sname,Sage,Ssex(S)))

    方式二:

    ΠSno,Sname,Sdept(S)÷ΠSdept(σSname=′李勇′(S))\Pi_{Sno,Sname,Sdept}(S) \div \Pi_{Sdept}(\sigma_{Sname='李勇'}(S))ΠSno,Sname,Sdept(S)÷ΠSdept(σSname=(S))

  • 查询至少选修C1C1C1课程和C3C3C3课程的学生的学号

    首先建立一个临时关系KKK

    Cno
    C1
    C3

    然后求 ΠSno,Cno(SC)÷K\Pi_{Sno,Cno}(SC) \div KΠSno,Cno(SC)÷K

    所以查询语句关系代数为:

    KaTeX parse error: Undefined control sequence: \or at position 53: …ma_{Cno = 'C1' \̲o̲r̲ ̲Cno = 'C3' }(C)…

    Sno
    200701
  • 查询至少选修了一门其先行课号CpnoCpnoCpno为5的课程的学生姓名。

    假设有如下三张表,进行这个检索指令

    方法1:ΠSname(σCpno=′5′(C ⋈ SC ⋈ S))\Pi_{Sname}(\sigma_{Cpno='5'}(C \, \bowtie \, SC \, \bowtie \, S))ΠSname(σCpno=5(CSCS))

    方法2:ΠSname(σCpo=′5′(C) ⋈ SC ⋈ ΠSno,Sname(S))\Pi_{Sname}(\sigma_{Cpo='5'}(C)\, \bowtie \, SC \, \bowtie \, \Pi_{Sno,Sname}(S))ΠSname(σCpo=5(C)SCΠSno,Sname(S))

    方法3:ΠSname(ΠSno(σCpno=′5′(C)⋈SC) ⋈ ΠSno,Sname(S))\Pi_{Sname}(\Pi_{Sno}(\sigma_{Cpno = '5'}(C) \bowtie SC )\, \bowtie \, \Pi_{Sno,Sname}(S))ΠSname(ΠSno(σCpno=5(C)SC)ΠSno,Sname(S))

  • 查询了选修了全部课程的学生的学号和姓名

    步骤一:找出选修了全部课程的学生的学号:

    ΠSno,Cno(SC)÷ΠCno(C)\Pi_{Sno,Cno}(SC) \div \Pi_{Cno}(C)ΠSno,Cno(SC)÷ΠCno(C)

    步骤二:找出全部学生的学号和姓名:

    ΠSno,Sname(S)\Pi_{Sno,Sname}(S)ΠSno,Sname(S)

    最后完整:ΠSno,Cno(SC)÷ΠCno(C) ⋈ ΠSno,Sname(S)\Pi_{Sno,Cno}(SC) \div \Pi_{Cno}(C) \, \bowtie \, \Pi_{Sno,Sname}(S)ΠSno,Cno(SC)÷ΠCno(C)ΠSno,Sname(S)

典型关系代数语言

  • ISBL(Information System Base Language)

    • IBM United Kingdom研究中心研制

    • 用于**PRTV(Peterlee Relational Test Vehicle)**实验系统

    • 与关系代数十分相近

    • 允许将关系表达式的值赋给一个关系变量

    • 允许属性的重命名

    • 可以完成关系代数的五种基本运算,是关系完备的

    • 参阅表3-4

      image-20250518144832238

      例子:

      • 检索计算机系学生的学号和姓名

        LIST Student: Sdept = ‘计算机’ % Sno, Sname

      • 检索选修了C1课的学生姓名和学生所在系

        R = Student * SC

        LIST R: Cno = ‘C1’ % Sname, Sdept

3. 关系演算

  • 关系演算:使用谓词演算表达对关系数据的查询

    • 用谓词的形式给出查询结果应该满足的条件;
    • 是以谓词演算为基础的关系数据查询语言;
    • 如何实现查询由系统子集解决;
    • 高度非过程化。
  • 关系演算

    • 元组关系演算

      谓词变量是元组变量

    • 域关系演算

      谓词变量是域变量

元组关系演算

用如下表

image-20250518150625345

  • 用元组演算表达式表示查询

  • 元组演算表达式的形式

    {t:φ(t)}\{t: \varphi(t) \}{t:φ(t)}

    • ttt是元组变量,表示某一关系中的元组
    • φ(t)\varphi(t)φ(t)是由原子公式和运算符组成的公式。
  • “检索计算机系的学生姓名”的元组演算表达式为:

    {t[2]:S(t) ∧ t[5]=′计算机′}\{t[2]:S(t) \, \land \, t[5] = '计算机' \}{t[2]:S(t)t[5]=计算}

    检索选修了C1课的学生信息

    KaTeX parse error: Undefined control sequence: \and at position 13: \{t:S(t) \, \̲a̲n̲d̲ ̲\, \exist u(SC(…

  • 元组关系演算语言ALPHA

    • E.F.Codd提出来的

    • 语言的基本格式为:

      (操作符) <工作空间名> (表达式)[:<条件>](操作符) \, <工作空间名> \, (表达式)[:<条件>](操作符)<工作空间名>(表达式)[:<条件>]

      • **操作符**为命令语句完成的功能,包括Get、Put、Update、Hold、DeleteGet、Put、Update、Hold、DeleteGetPutUpdateHoldDelete
      • **工作空间**是用户与数据库间的数据通信区,用字母www表示
      • **表达式**用于指定语句的操作对象,它可以是关系名或(和)属性名,一条语句可以同时操作多个关系或多个属性。
      • 条件是一个含逻辑运算符的谓词公式(逻辑表达式),用于将操作结果限定在满足条件的元组中;操作条件可以为空。
  • Alpha查询示例

    • 查询所有被选修的课程号码

      GETW(SC.Cno)GET W (SC.Cno)GETW(SC.Cno)

    • 查询信息系(IS)中年龄小于20的学号和年龄

      GETW(Student.Sno,Student.Sage):Student.Sdept=′IS′ ∧ Student.Sage<20GET W (Student.Sno,Student.Sage): \\ Student.Sdept='IS' \, \land \, Student.Sage < 20GETW(Student.Sno,Student.Sage):Student.Sdept=ISStudent.Sage<20

    • 查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序。

      $GET W (Student.Sno,Student.Sage): \ Student.Sdept=‘CS’ \textcolor{red}{DOWN} Studetn.Sage $

域关系演算

  • 关系运算表达式中的变量若是**域变量**,则为域关系演算。

  • 与元组变量不同,域变量的变化范围是**指定属性的域**而不是整个关系。

  • 域关系演算表达式的形式

    $ {t_1,t_2,……,t_k: \varphi(t_1,t_2,……,t_k) } $

    • t1,t2,……,tkt_1,t_2,……,t_kt1,t2,……,tk是域变量
    • φ(t1,t2,……,tk)\varphi(t_1,t_2,……,t_k)φ(t1,t2,……,tk)是由原子公式和运算符组成的公
  • “检索计算机系的学生姓名”

    $ {t_1:S(Sname:t_1,Sdept:计算机) } $

  • 域关系演算语言QBE——Query By Example

    • 由M.M.Zloof提出
    • 1978年在IBM370上得以实现
    • 基于屏幕表格的查询语言
    • 以填写表格的方式构造查询
    • 用示例元素(域变量)来表示查询结果可能的情况
    • 查询结果以表格形式显示
    • 是一种非专业用户使用的高级语言
  • QBE的主要操作命令有

    P.(显示)、I.(插入)、D.(删除)、U.(修改)P.(显示)、I.(插入)、D.(删除)、U.(修改)P.(显示)I.(插入)D.(删除)U.(修改)

  • QBE操作框架

    image-20250518153052917

  • QBE检索操作示例

    image-20250518153217658

4.关系数据语言

  • 关系数据语言的特点

    • 是一中高度非过程化的语言
      • 存取路径的选择由DBMSd的优化机制来完成
      • 用户不必应用循环结构就可以完成数据操作
    • 能够嵌入高级语言中使用
  • 关系代数语言

    • 用对关系的运算来表达查询要求
    • 典型代表:ISBL
  • 关系演算语言:用谓词来表达查询要求。

    • 按谓词变元的基本对象的不同分:
      • 元组关系演算语言
        • 谓词变元的基本对象是元组变量
        • 典型代表:ALPHA,QUEL
      • 域关系演算语言
        • 谓词变元的基本对象是域变量
        • 典型代表:QBE
  • 具有关系代数和关系演算双重特点的语言

    • 典型代表:SQL(Structural Query Language)
    • 它是集Query、DDL、DML、DCL于一体的关系数据语言,充分体现了关系数据语言的特点和优点,是关系数据库的标准语言。

5. 关系运算的安全限制

  • 关系是集合论中的概念,在集合论中,关系可以是无限的。
  • 在关系数据库中,关系被限定为有限的
  • 不产生无限关系的关系表达式称为安全运算表达式,所采取的措施称为安全限制
    • 关系代数运算是安全的,只要参加运算的关系是有限的;关系运算的结果也是有限的;关系运算的有限次复合不会出现无限关系。
    • 关系演算不一定是安全的,需要加以限制;通常方法是定义一个有限的符号集。

6. 关系运算的等价性

  • 在加以安全限制后,三种关系运算(关系代数、元组关系演算、域关系演算)在表达关系的功能上是等价的。
  • 如果EEE是一个关系代数表达式,则必定存在一个与EEE等价的安全的元组关系演算表达式;对于每个安全的元组关系演算表达式,必定存在一个等价的安全的域关系演算表达式;对于每个安全的域关系演算表达式,也必定存在一个等价的关系代数表达式。

本章小结

  • 关系模型的三要素
    1. 关系数据结构
      • 关系,关系模式,关系数据库
    2. 关系的完整性约束
      • 实体完整性、参照完整性、其他完整性
    3. 关系操作
      • 检索、插入、删除、修改等
      • 关系代数
      • 关系演算
        • 元组关系演算
        • 域关系演算
  • 关系数据语言
  • 关系运算的安全性和等价性
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐