数据库学习二 关系模型

SQL Series

数据库学习一 数据库导论: https://blog.yexca.net/archives/86
数据库学习二 关系模型: 本文
数据库学习三 SQL 语言: https://blog.yexca.net/archives/88
数据库学习四 关系数据库理论: https://blog.yexca.net/archives/89
数据库学习五 范式: https://blog.yexca.net/archives/90
数据库学习六 数据库设计: https://blog.yexca.net/archives/91
数据库学习七 数据库的控制功能: https://blog.yexca.net/archives/92

关系模型中的基本术语

关系数据库系统是支持关系模型的数据库系统。有关关系模型的的一些基本术语如下:

  • 关系:一个关系就是一张二维表,每个关系有一个关系名
  • 元组:表中的一行即为一个元组,对应存储文件中的一个记录值
  • 属性:表中的列称为属性,每一列有一个属性名,属性值相当于记录中的数据项或者字段值
  • 域:属性的取值范围,即不同元组对同一个属性的值所限定的范围
  • 关系模式:对关系的描述称为关系模式,由关系名和其属性集合构成,关系模式的格式为:关系名(属性名 1,···,属性名 n)

通常一个关系模式对应一个关系文件的结果

  • 候选码 (候选键):属性或属性组合,其值能够唯一地标识一个元组
  • 主码 (主键):在一个关系中可能有多个候选码,从中选择一个作为主码
  • 主属性:包含在任何候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性
  • 外码 (外键):如果一个关系中的属性或属性组并非该关系的码,但他们是另外一个关系的码,则称其为该关系的外码
  • 全码:关系模式的所有属性组是这个关系模式的候选码,称为全码
  • 超码 (超键):一个包含码的属性集称为超码

关系模型的定义

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

其中 R 为关系名,U 为组成该关系的属性名集合,D 为属性组 U 中属性所来自的域,dom 为属性向域的映像集合,F 为属性间数据的依赖关系集合

通常简记为 R(U) 或 R($A_1$, $A_2$, ···),其中 R 为关系名,U 为属性名集合,$A_1$、··· 为个属性名

关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成

关系数据结构

关系模型中数据的逻辑关系是一张二维表格

关系操作集合

关系模型给出了关系操作的能力

常见的关系操作有:选择、投影、连接、除、并、交、差等查询操作和增加、删除操作等

关系完整性约束

关系模型中的三个完整性规则如下:

  • 实体完整性:关系中主码的值不能为空或部分为空,也就是说,主码中属性即主属性不能取空值
  • 参照完整性:如果关系 $R_2$ 的外码 X 与关系 $R_1$ 的主码相对应 (基本关系 $R_1$ 和 $R_2$ 不一定是不同的关系,即它们可以是同一个关系),则外码 X 的每一个值必须在关系 $R_1$ 中主码的值中找到,或者为空值
  • 用户定义的完整性:指用户对某一具体数据指定的约束条件进行检验

关系代数运算符

运算符 符号 含义
集合运算符 × 笛卡尔积
专门的关系运算符 σπ÷ 选择投影连接
比较运算符 大于大于等于小于小于等于等于不等于
逻辑运算符 ¬

传统的集合运算

img

专门的关系运算符

  1. 连接

连接有 θ 连接、等值连接与自然连接

  • θ 连接:连接条件不为等于
  • 等值连接:连接条件为等于
  • 自然连接:除去重复属性的等值连接。最常用的连接运算
  1. 投影

投影运算是从关系的垂直方向进行运算,在关系 R 中选出若干属性列 A 组成新的关系,记作 $π_A(R)$

  1. 选择

选择运算是从关系的水平方向进行运算,是从关系 R 中选择满足给定条件的元组,记作 $σ_F(R)$

img

  1. 外连接

外连接运算是连接运算的扩展,可以处理由于连接运算而缺失的信息

  • 左外连接:取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值 null 填充所有来自右侧关系的属性
  • 有外连接:取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值 null 填充所有来自左侧关系的属性
  • 全外连接:完成左外连接和右外连接的操作
  1. 除法

img

符号转 SQL 语言

关系 R:

A B C
1 2 3
4 5 6
7 8 9

投影转 SQL 语言

$π_?(?)$

select ? from ?

$π_{A, B, C}(R)$ 或者 $π_{1, 2, 3}(R)$

select A, B, C from R

注:SQL 语言不支持列 (属性) 的序号

选择转 SQL 语言

$π_?(σ_?(?))$

select ? from ? where ?

$π_{A, B, C}(σ_{B >= ‘5’}(R))$ 或者 $π_{1, 2, 3}(σ_{2 >= ‘5’}(R))$

select A, B, C from R where B >= '5'
# 或者
select A, B, C from R where B >= 5

笛卡尔积转 SQL 语言

$π_{R.A, R.B, R.C, S.A, S.B, S.D}(R×S)$

select R.A, R.B, R.C, S.A, S.B, S.D
from R, S
# 升序排列
order by R.A asc

自然连接转 SQL 语言

关系 R(A, B, C) 与 S(B, C, D)

$π_{R.A, R.B, R.C, S.D}(σ_{R.B = S.B ∩ R.C = S.C}(R×S))$

select R.A, R.B, R.C, S.D
from R, S
where R.B = S.B and R.C = S.C
This post is licensed under CC BY-NC-SA 4.0 by the author.