Post

关系数据库

关系数据库

1. 关系数据模型

一种被广泛使用的实现数据模型

关系数据结构

  • 关系数据模型中使用的唯一数据结构:关系
    • 实际上就是一张二维表
      • 行:元组,表示对象
      • 列:属性,表示对象的性质
    • 数学定义:$R(D_1, D_2,…, D_n)$为$D_1 \times D_2 \times … \times D_n$的子集
      • 关系R的元组$(d_1, d_2, …, d_n) \in R$
    • 只有符合客观实际的关系才是正确的关系
  • 关系的键(用来区分不同的元组)
    • 超键
      • 如果关系的某一组属性的值能唯一标识每个元组
    • 候选键
      • 如果一个超键的任意真子集都不是超键(极小的超键)
    • 主键
      • 每个关系都至少有一个候选键,人为指定其中一个作为主键
    • 外键
      • F是关系R的属性子集。若F与关系S的主键K相对应,则F是R的外键
        • R为参照关系
        • S为被参照关系

关系操作

  • 增删查改
  • 查询语言:用于表示关系操作的语言
    • 关系代数
      • 使用关系代数表达式明确给出查询的执行过程
    • 关系演算
      • 使用谓词逻辑表达式描述查询
      • 元组关系演算:谓词逻辑变量是元组
      • 域关系演算:谓词逻辑变量是域
    • 结构化查询语言SQL

关系完整性约束

关系数据库中的所有数据必须满足的约束关系

  • 实体完整性
    • 关系中任意元组的主键值必须唯一
    • 关系中任意元组的主键中的属性值非空
  • 参照完整性
    • 外键必须满足以下两个条件之一
      • F的值为空
      • 若F的值不为空,则F的值必须在S中存在
  • 用户定义完整性

2. 关系代数

使用关系代数表达式明确给出查询的执行过程

选择操作

  • 功能:从一个关系中选出满足给定条件的元组
  • 语法:$\sigma_\theta(R)$
    • $\sigma$:选择操作符
    • $R$:关系名
    • $\theta$:条件表达式

投影操作

  • 功能:从一个关系中选出指定的列,并去掉重复元组
  • 语法:$\sqcap_L(R)$
    • $\sqcap$:投影操作符
    • $R$:关系名
    • $L$:投影属性列表

并操作

  • 功能:计算关系R和S的并集
  • 语法:$R\cup S$

差操作

  • 计算关系R和S的差集
  • 语法:$R - S$
  • 要求:R和S必须具有相同个数的属性;R和S对应属性的值域必须相容

笛卡尔积操作

  • 功能:计算两个关系的笛卡尔积
  • 语法:$R \times S$
  • 通常和选择操作一起使用,即连接(join)

重命名操作

  • 功能:修改关系名或属性名
  • 语法:
    • $\rho_{B\leftarrow A}(R)$:将关系R的属性A更名为B
    • $\rho_S(R)$:将关系R更名为S
    • $\rho_{S(A_1, A_2,…,A_n)}(R)$:将关系R更名为S,并将R的全部属性更名为$A_1, A_2,…,A_n$
  • 当把一个关系和它自身进行自连接时,需要区分同一个关系的两个副本。此时需要重命名操作

派生关系代数操作

用来简化查询编写

  • 任何一项派生关系代数操作都可以用基本关系代数操作来表示

交操作

  • 功能:计算关系R和S的交集
  • 语法:$R\cap S$
  • 要求
    • R和S必须具有相同个数的属性
    • R和S对应属性的值域必须相容

内连接

  • R和S的内连接的结果只包含R和S中满足连接条件的元组,不满足的均不会出现在连接结果中
$\theta$连接
  • 功能:将关系R和S中满足给定连接条件$\theta$的元组进行连接
  • 语法:$R\Join_\theta S$
  • 属性:$R\Join_\theta S = \sigma_\theta(R \times S)$
  • 同名属性是会都保留的,前面加上关系名前缀
等值连接
  • 连接条件$\theta$仅涉及相等比较的$\theta$连接
自然连接
  • 功能:从连接结果中去掉重复的同名属性
  • 语法:$R\Join S$

外连接

  • 还需保留R或S中不满足连接条件的元组
左外连接
  • 语法:$R$ $⟕_\theta$ $S$
  • 功能:对于R中不满足给定条件$\theta$的元组,包含该元组,但是S中属性的值为空
  • 左外自然连接
    • 语法:$R$ $⟕$ $S$
右外连接
  • 语法:$R$ $⟖_\theta$ $S$
  • 功能:相反
  • 右外自然连接
    • 语法:$R$ $⟖$ $S$
全外连接
  • 语法:$R$ $⟗_\theta$ $S$
  • 全外自然连接
    • 语法:$R$ $⟗$ $S$
反连接
  • 功能:找出R中不满足与S的连接条件$\theta$的元组
  • 语法:$R\rhd_\theta S$
  • 自然反连接
    • 语法:$R\rhd S$
  • 功能:结果为使得$S\times T \subseteq R$的最大的关系T,它只包含R中的属性,但不包含S中的属性
  • 语法:$R\div S$

扩展关系代数操作

基本关系代数操作的查询功能有限,所以引入扩展关系代数操作,以增强其查询能力

分组操作

  • 对一个关系中的元组进行分组,分组属性值相同元组的分为一组
  • 对每个组中元组的非分组属性的值进行聚集
    • 计数count、求最小值min、求最大值max、求和sum、求平均值avg

$\gamma_{Sdept, Sex; count(*)->cnt}(Student)$

SdeptSexcnt
PhysicsM1
CSF1
CSM1
MathF2

赋值操作

略略略…

This post is licensed under CC BY 4.0 by the author.