​ 数据库系统2——关系数据库系统。

关系模型

关系模型是由 E.F.Codd 于 1970 年提出的。

关系模型的组成要素

三个组成要素
  • 关系数据结构
    • 建立在集合代数的基础上
  • 完整性约束
    • 实体完整性
    • 参照完整性
    • 用户定义的完整性
  • 关系运算
    • 关系代数 —— 基于集合的运算 —— 基于关系代数设计的数据库语言(ISBL)
    • 关系演算
      • 元组演算 —— 基于逻辑的运算 —— 基于元组演算设计的数据库语言(QUEL)
      • 域演算 —— 基于示例的运算 —— 基于域演算设计的数据库语言(eg:QBE)

数据结构

  • 基本概念

    • 关系 —— 表

      • 数据集合
      • 属性不可再分(关系第一范式)
    • 元组(记录) —— 行

      • 任意两个元组不可重复(集合性质)
        • 但是很多产品没有遵守这一性质
    • 属性(字段、数据项)—— 列

      • 同质性:每一列中的分量是同类型的,来自同一个域
      • 不同的列可能出自同一个域
    • —— 列的取值范围

      • 一组具有相同数据类型的值的集合
    • 关系模式 —— 大概相当于表头(并不)

      形式:$R(U,D,DOM,I,F)$

      简记为:$R(U)$,若 $U=\{A_1,A_2,…,A_n\}$,也可写为 $R(A_1,A_2,…,A_n)$,n 称为关系的目(或者度)。

    • 关系实例:关系模式在给定时刻的一个快照。时某一时刻现实世界状态的真实反映。

    • 关系数据库模式&关系数据库实例

  • 补充概念

    • 基数:集合中元素的个数

    • 笛卡尔积:由n个域形成的所有可能的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 \}$

      笛卡尔积的每一个元素成为一个n-元组。

    • 分量:元组中的每一个值叫做一个分量

完整性约束

各种码的概念
  • 超码:一个或多个属性的集合,这些属性的组合可以唯一标识一个元组的。

  • 候选码:最小的超码,一个关系模式中可能不止一个候选码。

  • 主码:被选定用来区分不同元组的候选码,一个关系模式只有一个。
  • 主属性:主码中的属性。
  • 外码:关系模式$R_1$的属性中包含另一个关系模式$R_2$中的主码,这个属性集合被称为参照$R_2$的外码。
关系数据模型的完整性约束
  • 实体完整性约束:主码属性值不能为空值。
    • 空值:不知道、不存在或者无意义的值。
  • 参照完整性约束:如果关系$R_1$的外码$F_k$与关系$R_2$的主码$P_k$相对应,则$R_1$中的每一个元组的$F_k$值要等于$R_2$中某个元组的$P_k$值或者为空值。
  • 用户定义的完整性约束:用户针对具体的应用程序定义的完整性约束条件。

(语义完整性约束和函数依赖?)

DBMS对于完整性的支持
  • 实体完整性&参照完整性是由DBMS系统字段支持的
  • DBMS系统通常会提供以下机制:
    • 使得用户可以自行定义有关的完整性约束条件。
    • 在发生更新时自动检验。

关系运算

关系代数
关系代数是一种过程化查询语言。关系代数操作以一个或多个关系作为输入,结果得到一个新的关系。

关系代数运算

  • 六种基本运算:选择、投影、并、差、笛卡尔积、重命名。
  • 其他运算:交、连接、除。(可用基本运算组合定义)

相容性:关系 R 与关系 S 存在相容性,当且仅当:

  1. 关系 R 与关系 S 的属性数目相同。
  2. R 中与 S 中相对应位置的属性的域相同。
并、差、交运算需满足相容性

关系代数基本运算

  • : $R\cup S = \{t | t \in R \wedge t\in S\}$,其中 $t$ 是元组。
  • :$R-S = \{t \in R \wedge t\notin S\}$
  • 笛卡尔积(积):$R \times S = \{ | \in R \wedge \in S \}$
  • 选择:$\sigma_{con}(R)=\{t | t\in R\wedge con(t)\}$
    • $con$为选择谓词,运算符优先次序为:$括号; \theta; \lnot ; \wedge; \vee$
  • 投影:$\Pi_{A_1,A_2,…A_k}(R) = \{ | t\in R\}$
    • 注意去除重复元组
  • 更名:$\rho_S (R)$ 或者 $\rho_{S(A_1,…,A_n)}(R)$

附加运算

附加运算不增加关系代数的表达能力,但是可以简化常用查询。
  • :$R \cap S = \{t |t\in R and t \in S\}$
  • 连接
    • $\theta$ 连接:大概是有连接条件的连接
    • 等值连接:$\theta$ 为等号的$\theta$ 连接
    • 自然连接($\bowtie$):要求进行笛卡尔积的两个关系在所有相同属性上的值一致
  • 赋值:只能赋给临时关系变量,不能增加关系运算的表达能力
  • 外连接:(左外连接&右外连接&全外连接)左外是以左边为准,没法匹配的用null填充右边属性。
  • :$R \div S = \{t | t \in \Pi_z(R) \wedge \forall u \in S (tu \in R) \}$

其他扩展运算

可以实现不能有基本的关系代数运算来表达的查询
  • 广义投影:在投影中使用算术运算和字符
  • 聚集
关系演算——元组演算
非过程化的查询语言,只需要描述所需信息而不需要给出获取过程
  • 表达式:$\{t | P(T)\}$

    • 所有使得公式P为真的元组t的集合
  • 公式P由原子公式构成

    • $s \in R; s[x] \Theta u[y]; s[x] \Theta C.$
关系演算——域演算
使用从属性域中取值的域变量,而不是整个元组的值
  • 形式化定义:$\{|P(x_1,…,x_n)\}$
    • 其中$x_1,…,x_n$分别是域变量
    • P由原子公式构成
    • 查询结果时是有包含$$且使$P(x_1,…,x_n)$为真的元组
关系运算的安全性
  • 安全关系运算系统:如果一个关系运算系统不产生不限关系和无穷验证则是安全的
  • 关系代数系统是安全的
  • 元组演算和域演算是不安全的
    • 引入元组关系公式的域的概念,对关系演算进行限制
三者等价性

下述三者等价:

  • 基本关系代数
  • 限制在安全范围内的元组关系演算
  • 限制在安全范围内的域关系演算
本章重点:关系、属性、元组、码等关系数据结构基本概念;关系代数;完整性约束(实体完整性、参照完整性、用户定义完整性)


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!