思维导图

  • 关系数据库
    • 关系模型概述
      • 关系操作集合
        • 常用的关系操作
        • 关系操作的特点
        • 关系数据语言的种类
        • 关系数据语言的特点
    • 关系数据结构
      • 概述
      • 关系
        • 域(Domain)
        • 笛卡尔积(Cartesian Product)
        • 关系(Relation)
          • 元组
          • 单元关系与二元关系
          • 关系的表示
          • 属性
            • 候选码(Candidate Key)
            • 全码(All-key)
            • 主码(Primary Key)
          • 三类关系
          • 基本关系的性质
      • 关系模式
        • 什么是关系模式
        • 定义关系模式
        • 关系模式与关系
      • 关系数据库
        • 简介
        • 定义
        • 型与值
    • 关系完整性约束
      • 实体完整性
      • 参照完整性
        • 关系间的引用
        • 外码
        • 规则
      • 用户定义的完整性
    • 关系代数
      • 关系代数运算符
        • 集合运算符
        • 比较运算符
        • 专门的关系运算符
        • 逻辑运算符
      • 传统的集合运算符
        • 并(Union)
        • 差(Difference)
        • 交(Intersection)
        • 广义笛卡尔积(Extended Cartesian Product)
      • 专门的关系运算符
        • 选择(Selection)
        • 投影(Projection)
        • 连接(Join)
          • 等值连接(equijoin)
          • 自然连接(Natural join)
        • 除(Division)

关系模型概述

  • 关系数据库系统
    是支持关系模型的数据库系统
  • 关系模型的组成
    • 关系数据结构
    • 关系操作集合
    • 关系完整性约束

关系操作集合

常用的关系操作

  • 查询
    选择、投影、连接、除、并、交、差
  • 数据更新
    插入、删除、修改

查询的表达能力是其中最主要的部分

关系操作的特点

  • 集合操作方式,即操作的对象和结果都是集合。
    • 关系数据模型的数据操作方式:一次一集合
    • 非关系数据模型的数据操作方式:一次一记录

关系数据语言的种类

  1. 关系代数语言
  2. 关系演算语言:用谓词来表达查询要求
    • 元组关系演算语言
      谓词变元的基本对象是元组变量——典型代表:APLHA, QUEL
    • 域关系演算语言
      谓词变元的基本对象是域变量——典型代表:QBE
  3. 具有关系代数和关系演算双重特点的语言
    典型代表:SQL

关系数据语言的特点

  • 关系语言是一种高度非过程化的语言
    • 存取路径的选择由DBMS的优化机制来完成
    • 用户不必用循环结构就可以完成数据操作
  • 能够嵌入高级语言中使用
  • 关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价

关系数据结构

概述

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

关系

域(Domain)

域是一组具有相同数据类型的值的集合。

例如:

  • 整数
  • 实数
  • 介于某个取值范围的整数
  • 指定长度的字符串集合
  • {‘男’,‘女’}
  • 介于某个取值范围的日期

笛卡尔积(Cartesian Product)

给定一组域D1,D2,,DnD_1,D_2,\cdots,D_n,这些域中可以有相同的。
D1,D2,,DnD_1,D_2,\cdots,D_n的笛卡尔积为:
D1×D2××Dn={(d1,d2,,dn)diDi,i=1,2,,n}D_1 \times D_2\times\cdots\times D_n=\{(d_1,d_2,\cdots ,d_n) |d_i\in D_i,i=1,2,\cdots,n\}

所有域的所有取值的一个组合,不能重复

  • 元组(Tuple)
    笛卡尔积中每一个元素(d1,d2,,dn)(d_1,d_2,\cdots ,d_n)叫作一个n元组(n-tuple)或简称元组
  • 分量(Component)
    笛卡尔积元素(d1,d2,,dn)(d_1,d_2,\cdots ,d_n)中的每一个值did_i叫作一个分量
  • 基数(Cardinal number)
    Di(i=1,2,,n)D_i(i=1,2,\cdots ,n)为有限集,其基数为mi(i=1,2,,n)m_i(i=1,2,\cdots ,n),则D1×D2××DnD_1 \times D_2\times\cdots\times D_n的基数M为:
    M=i=1nmiM=\prod\limits_{i=1}^{n} m_i

举例

  • D1=导师集合SUPERVISOR={张三,李四}
  • D2=专业集合SPECIALITY={计算机专业,信息专业}
  • D3=研究生集合POSTGRADUATE={王五,赵六,孙七}
    各自的基数分别为2,2,3。他们的笛卡尔积的基数为12。

关系(Relation)

D1×D2××DnD_1 \times D_2\times\cdots\times D_n的子集叫作在域D1,D2,,DnD_1,D_2,\cdots,D_n上的关系,表示为R(D1,D2,,Dn)R(D_1,D_2,\cdots,D_n)
R\mathcal{R}:关系名
n\mathcal{n}:关系的目或度(Degree)

元组

关系中的每个元素是关系中的元组,通常用tt表示。

也称记录,关系表中的每行对应一个元组,组成元组的元素称为分量。数据库中的一个实体或实体之间的一个联系均使用一个元组来表示。

单元关系与二元关系

n=1n=1时,称该关系为单元关系(Unary relation)。
n=2n=2时,称该关系为二元关系(Binary relation)。

关系的表示

关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。

SUPERVISOR\mathcal{SUPERVISOR} SPECIALITY\mathcal{SPECIALITY} POSTGRADUATE\mathcal{POSTGRADUATE}
张三 信息专业 王五
李四 信息专业 赵六
李四 信息专业 孙七

属性

  • 关系中不同列可以对应相同的域,为了加以区分,必须对每列起一一个名字,称为属性(Attribute)。nn目关系必有nn个属性。
  • 属性具有两层含义:型指字段名和属性值域;值是指属性具体的取值。
  • 关系中的字段名具有标识列的作用,所以在同一个关系中的字段名(列名)不能相同。一个关系中通常有个多个属性,属性用于表示实体的特征。

候选码(Candidate Key)
  • 若关系中的某一属性组的值能唯一地标识一一个元组,则称该属性组为候选码。
  • 在最简单的情况下,候选码只包含一个属性。

在不重名的情况下,可以用学号性别作为学生关系的候选码。

全码(All-key)
  • 在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码。
  • 全为候选码。
主码(Primary Key)
  • 若一个关系有多个候选码,则人为选定其中一个为主码。
  • 这个候选码的诸属性称为主属性。
  • 不包含在任何候选码中的属性称为非码属性。

  • 不仅可以标识唯一的行,还可以建立与别的表之间的联系。
  • 作用:
    • 作为关联表的外键,链接两个表;
    • 使用主码值来组织关系的存储;
    • 使用主码索引快速检索数据。

主码选择的注意事项

  1. 建议取值简单的关键字为主码。
  2. 为便于表的维护,不建议使用复合主键。
  3. 代理键
    • 定义:一个没有实际意义的字段作为表的主键。
    • 取值:建议由DBMS(例如MySQL)或者应用程序自动生成,避免人工录入时人为操作产生的错误。

三类关系

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

基本关系的性质

  • 关系中的元组存储了某个实体或实体某个部分的数据。
  • 列是同质的(Homogeneous)
    • 每一列中的分量是同一类型的数据,它们来自同一个域。
  • 同一关系的字段名具有不可重复性
    • 同一关系中不同属性的数据可出自同一个域,但不同的属性要给予不同的字段名。
  • 列的位置具有顺序无关性
    • 即列的次序可以任意交换、重新组织。
  • 关系具有元组无冗余性
    • 即关系中的任意两个元组不能完全相同。
  • 关系中元组的位置具有顺序无关性
    • 元组的顺序可以任意交换。
  • 分量必须取原子值
    • 每个分量都必须是不可分的数据项。

关系模式

什么是关系模式

  • 关系模式(Relation Schema)是型
  • 关系是值
  • 关系模式是对关系的描述
    • 元组集合的结构
      • 属性构成
      • 属性来自的域
      • 属性与域之间的映象关系
    • 元组语义以及完整性约束条件
    • 属性间的数据依赖关系集合

定义关系模式

关系模式可以形式化地表示为:
R(U,D,dom,F)R(U,D,dom,F)

符号 表示
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域
dom 属性向域的映象集合
F 属性间的数据依赖关系集合

关系模式通常可以简记为
R(U)R (U)R(A1,A2,,An)R(A_1,A_2,…,A_n)

符号 表示
R 关系名
A_1,A_2,…,A_n 属性名
  • 注:域名及属性向域的映象常常直接说明为属性的类型、长度

关系模式与关系

  • 关系模式
    • 对关系的描述
    • 静态的、稳定的
  • 关系
    • 关系模式在某一时刻的状态或内容
    • 动态的、随时间不断变化的

关系是关系模式在某一时刻的状态或内容。
实际应用中,人们通常把关系模式和关系都称为关系,通过上下文加以区别。

关系数据库

简介

  • 系统而严格地提出关系模型的是美国IBM公司的E.F.Codd 1970年提出关系数据模型

E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”, 《Communication of the ACM》,1970

  • 之后,提出了关系代数和关系演算的概念
  • 1972年提出了关系的第一、第二、第三范式
  • 1974年提出了关系的BC范式

定义

在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成的一个关系数据库。

型与值

  • 型:关系数据库模式—抽象

若干域的定义;域上定义的若干关系模式

  • 值:关系模式在某一时刻对应的关系的集合

关系数据库的值简称为关系数据库RDB

关系完整性约束

  • 实体完整性
    通常由关系系统自动支持
  • 参照完整性
    早期系统不支持,目前大型系统能自动支持
  • 用户定义的完整性
    反映应用领域需要遵循的约束条件,体现了具体领域中的语义约束
    用户定义后由系统支持

关系模型的完整性规则是对关系的某种约束条件。
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。

实体完整性

若属性A是基本关系R的主属性,则属性A不能取空值。


学生(学号,姓名,性别)
‘学号’属性为主码,则其不能取空值

参照完整性

关系间的引用

在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。

例 学生实体、专业实体以及专业与学生间的一对多联系
 学生(学号,姓名,性别,专业号,年龄)
  专业(专业号,专业名)

外码

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

例 学生实体、专业实体以及专业与学生间的一对多联系
 学生(学号,姓名,性别,专业号,年龄)
  专业(专业号,专业名)
‘专业号’称为学生关系的外码

  • 关系RRSS不一定是不同的关系。

学生(学号,姓名,性别,所在班级,班长学号)

  • 目标关系S的主码KSK_S和参照关系的外码FF必须定义在同一个(或一组)域上
  • 外码并不一定要与相应的主码同名。当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。

规则

若属性(或属性组)FF是基本关系RR的外码它与基本关系SS的主码KSK_S相对应(基本关系RRSS不一定是不同的关系),则对于RR中每个元组在FF上的值必须为:

  • 或者取空值(F的每个属性值均为空值)
  • 或者等于S中某个元组的主码值。

学生关系中每个元组的“专业号”属性只
取下面两类值:

  1. 空值,表示尚未给该学生分配专业
  2. 非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中

用户定义的完整性

  • 用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。

关系代数

一种抽象的查询语言,用对关系的运算来表达查询。
关系代数运算的三个要素:

  • 运算对象:关系
  • 运算结果:关系
  • 运算符:四类
    1. 集合运算符
      • 将关系看成元组的集合
      • 运算是从关系的“水平”方向即行的角度来进行
    2. 专门的关系运算符
      • 不仅涉及行而且涉及列
    3. 算术比较符
      • 辅助专门的关系运算符进行操作
    4. 逻辑运算符
      • 辅助专门的关系运算符进行操作

关系代数运算符

集合运算符

运算符 含义
\cup
-
\cap
×\times 广义笛卡尔积

比较运算符

运算符 含义
>> 大于
\ge 大于等于
<< 小于
\le 小于等于
== 等于
\not= 不等于

专门的关系运算符

运算符 含义
σ\sigma 选择
π\pi 投影
\bowtie 连接
÷\div

逻辑运算符

运算符 含义
\wedge
\vee
¬\neg

传统的集合运算符

并(Union)

  • R,SR,S具有相同的目nn(即两个关系都有nn个属性),相应的属性取自同一个域
  • RSR\cup S仍为nn目关系,由属于RR或属于SS的元组组成

RS={ttRtS}R\cup S = \{ t|t\in R\vee t\in S \}

差(Difference)

  • R,SR,S具有相同的目nn,相应的属性取自同一个域

  • RSR - S仍为nn目关系,由属于RR且不属于SS的所有元组组成

RS={ttRtS}R-S = \{ t|t\in R \wedge t\notin S \}

交(Intersection)

  • R,SR,S具有相同的目nn,相应的属性取自同一个域

  • RSR\cap S仍为nn目关系,由既属于RR又属于SS的元组组成

RS={ttRtS}R\cap S = \{ t|t \in R \wedge t \in S \}

RS=R(RS)R\cap S = R –(R-S)

广义笛卡尔积(Extended Cartesian Product)

  • RR
    nn目关系,k1k_1个元组
  • SS
    mm目关系,k2k_2个元组
  • R×SR \times S
    • 列:(n+m)(n+m)列的元组的集合
      元组的前nn列是关系RR的一个元组
      mm列是关系SS的一个元组
    • 行:k1×k2k1 \times k2个元组

R×S={trts^trRtsS}R \times S = \{\hat{t_r t_s} |t_r \in R \wedge t_s \in S \}

专门的关系运算符

选择(Selection)

  1. 选择又称为限制(Restriction)

  2. 选择运算符的含义

    • 在关系R中选择满足给定条件的诸元组
      σF(R)={ttRF(t)=true}\sigma_F(R)=\{t|t \in R \wedge F(t)='true'\}

    • FF:选择条件,是一个逻辑表达式,基本形式为:

      [¬(]X1θY1[)][ϕ[¬(]X2θY2[)]][\neg(]X_1\theta Y_1 [)][\phi [\neg(]X_2 \theta Y_2[)]] \cdots

      • θ\theta:比较运算符(>,,<,,=,>,\ge,<,\le,=,\not=
      • X1Y1X_1Y_1等:属性名、常量、简单函数;属性名也可以用它的序号来代替;
      • ϕ\phi:逻辑运算符(\vee\wedge
      • [][\quad]:表示可选项
      • \cdots: 表示上述格式可以重复下去
  3. 选择运算是从行的角度进行的运算

选择——对元组进行操作,行变、列一定不变,只作用于单一关系之上。

投影(Projection)

  1. 投影运算符的含义
    • 从R中选择出若干属性列组成新的关系
      πA(R)={t[A]tR}\pi_A(R)=\{t[A]|t \in R\}
      AARR当中的属性列。
  2. 投影操作主要是从列的角度进行运算。
    • 但投影之后不仅取消,了原关系中的某些列,而且还可能取消某些元组(避免重复行)。

示例数据库
Student(Sno, Sname, Sage, Ssex, Sdept)
Course(Cno, Cname, Ccredit, Cpno)
SC(Sno, Cno, Grade)
查询学生的姓名和所在系
即求Student关系上学生姓名和所在系两个属性上的投影πSname,Sdept(Student)\pi_{Sname, Sdept}(Student)π2,5(Student)\pi_{2,5}(Student)

连接(Join)

  1. 连接也称θ\theta连接
  2. 连接运算的含义
    • 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
      RAθBS={trts^trRtsStr[A]θts[B]}R\mathop{\bowtie}\limits_{A \theta B} S=\{\hat{t_rt_s}|t_r \in R \wedge t_s \in S \wedge t_r[A] \theta t_s[B]\}
    • 连接运算从RRSS的广义笛卡尔积R×SR \times S中选取(RR关系)在AA属性组上的值与(SS关系)在BB属性组上值满足比较关系的元组。

等值连接(equijoin)

  • 什么是等值连接
    • θ\theta为“=”的连接运算称为等值连接
  • 等值连接的含义
    • 从关系RRSS的广义笛卡尔积中选取AABB属性值相等的那些元组,即等值连接为:
      RA=BS={trts^trRtsStr[A]=ts[B]}R\mathop{\bowtie}\limits_{A = B} S=\{\hat{t_rt_s}|t_r \in R \wedge t_s \in S \wedge t_r[A] = t_s[B]\}

自然连接(Natural join)

  • 什么是自然连接
    • 自然连接是一种特殊的等值连接
      • 两个关系中进行比较的分量必须是相同的属性组
      • 在结果中把重复的属性列去掉
  • 自然连接的含义
    R和S具有相同的属性组B
    RS={trts^trRtsStr[B]=ts[B]}R\bowtie S=\{\hat{t_rt_s}|t_r \in R \wedge t_s \in S \wedge t_r[B] = t_s[B]\}\,

除(Division)

给定关系R(X,Y)R (X,Y)S(Y,Z)S(Y,Z),其中X,Y,ZX,Y,Z为属性组。RR中的YYSS中的YY可以有不同的属性名,但必须出自相同的域集。RRSS的除运算得到一个新的关系P(X)P(X)PPRR中满足下列条件的元组在XX属性列上的投影:元组在XX上分量值xx的象集YxY_x包含SSYY上投影的集合。
R÷S={tr[X]trRπY(S)Yx}R \div S=\{t_r[X]|t_r \in R \wedge \pi_Y(S) \subseteq Y_x\}
YxY_xxxRR中的象集,x=tr[x]x=t_r[x]

除操作是同时从行和列的角度进行的。

  • 在关系RR中,AA可以取四个值{a1,a2,a3,a4}\{a_1,a_2,a_3,a_4\}
    • a1a_1的象集为{(b1,c2),(b2,c3),(b2,c1)}\{(b_1,c_2),(b_2,c_3),(b_2,c_1)\}
    • a2a_2的象集为{(b3,c7),(b2,c3)}\{(b_3,c_7),(b_2,c_3)\}
    • a3a_3的象集为{(b4,c6)}\{(b_4,c_6)\}
    • a4a_4的象集为{(b6,c6)}\{(b_6,c_6)\}
  • SS(B,C)(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}\{(b_1,c_2),(b_2,c_1),(b_2,c_3)\}

只有a1a_1的象集包含了SS(B,C)(B,C)属性组上的投影,所以R÷S=a1R \div S={a_1}

练习题

  • 有两个关系R(ABC)R(A,B,C)S(B,C,D)S(B,C,D),则R×SR\times S结果的属性个数是( D
    A. 3
    B. 4
    C. 5
    D. 6

  • 下述哪个是单目运算?(C
    A. 差
    B. 并
    C. 投影
    D. 除

  • 取出关系中的某些列,并消去重复元组的关系代数运算称为(B
    A. 取列运算
    B. 投影运算
    C. 连接运算
    D. 选择运算