db_2 关系数据库

关系模型

数据结构

关系模型的数据结构是关系

关系模型建立在集合代数基础上

关系

  • 域:一组具有相同数据类型的值的集合
    • 集合
    • 基数$m_i$
  • 笛卡尔积
    • 域的笛卡尔积
    • 基数$\prod_{i=1}^{n}m_i $
  • 元组/(记录)
    • 笛卡尔积的每个元素一个n元组$(d_1,d_2,…,d_n)$
  • 分量
    • 元组的一个元素的一个分量$d_i$

关系是元组的集合

  • 关系

    • 笛卡尔积的子集 $R(D_{1},D_{2},\cdots,D_{n})$
    • R是关系的名字 n是关系的度/目
    • n=1 单元/一元关系 n=2 二元关系
    • 二维表
      • 元组:每一行
      • 域:每一列
      • 属性$A_i$:列名(唯一)
      • 值域:属性$A_i$的取值范围$D_i$
    • 三种类型
      • 基本关系
        • 实际存储数据的逻辑表示
        • 关系的性质(*):
        • 列是同质的 即每一列中的分量来自同一域, 是同一类型的数据
        • 不同的列可出自同一域,每列必须有不同的属性名
        • 列次序可以互换
        • 任意两个元组不能完全相同(候选码不能完全相同)
        • 行次序可以互换
        • 每一分量必须是不可再分的数据(原子值)满足这一条件的关系称作满足第一范式(1NF)的
      • 查询表
        • 查询结果对应的表
      • 视图表
        • 基本表或其他视图导出的表/虚表
    • 候选码

      关系中的某一属性组,若它的值唯一地标识了一个元组,并具有最小性(子集不行)

      比方说 学号可以直接唯一表示我,有最小性

    • 主码

      若一个关系有多个侯选码,则选定其中一个为主码

      比如 我的学号和身份证号 选一即可

    • 全码

      每个属性都是候选码

  • 主属性、非主属性

    • 候选码中的诸属性称为主属性
    • 不包含在任何候选码中的属性称为非主属性

关系模式

  • $R(U,D,dom,F)$
    • R 关系名
    • U 组成关系的属性名集合
    • D U中属性所来自的域集合
    • dom属性->域映象集合
      • 例子:SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
      • DOM(SUPERVISOR)=DOM(POSTGRADUATE)=PERSON(导师和学生都出自人这个域)
    • F 属性间数据依赖关系集合(Chapter 6)
  • 简写$R(A_1,A_2,\cdots\cdots,A_n)$
    • R关系名
    • $A_i$属性名
    • D、dom属性类型、长度

关系和关系模式

关系是关系模式在某一时刻的状态或内容

关系模式是静态

关系是动态

关系数据库

所有关系的集合构成一个关系数据库

  • 关系数据库的型(关系数据库模式):关系模式的集合(若干域、若干域上定义的关系模式)
  • 关系数据库的值(关系数据库):关系的集合

完整性约束

关系的两个不变性:实体完整性、参照完整性

  • 实体完整性

    • 存在属性or属性组合是主码
    • 主码不可为空或部分为空
    • 主属性不能是空值
  • 参照完整性

    • 定义外码与主码的引用规则

    • 外码(外码不是所在关系的码)

      基本关系R中属性或属性组F并非R的码,但$K_s$是基本关系S的主码,如果F和$K_s$相对应,则称F是R的外码

      R和S可以相同!!!例子:学生(学号,姓名,性别,专业号,年龄,班长学号)

      外码不一定与主码重名

    • 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码$K_s$相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值

      • 取空值(F的每个属性值均为空值)
      • 等于S中某个元组的主码值
  • 用户定义完整性

    • 针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求
    • 关系模型定义和检验此类完整性的机制

关系操作

关系数据操作方式的特点是集合操作

操作的对象与结果都是集合

关系数据操作的基础是“关系运算”

  • 关系代数 (代数方式)
  • 关系演算(逻辑方式)
    • 元组关系演算
    • 域关系演算

关系代数

image-20241221164637787

传统集合运算

(1)并

(2)差

(3)交

(4)广义笛卡儿积(乘)

R度m S度n RxS度m+n

k1个元组和k2个元组 笛卡儿积 成为k1*k2个元组

注意:属性名如果相同 应该标识一下R.A S.A

image-20241221143057809

专门集合运算

$R(A_1,A_2,\cdots\cdots,A_n)$

  • 元组:$t\in R$

    $t[A_i]$是元组t对应属性Ai的一个分量

  • 属性组

    $t[A]$是元组t对应属性组A上所有分量的集合

    $\bar A$是去掉$A_{i1}\cdots\cdots A_{ik}$后剩的属性组

  • 元组的串接 $\overset{\frown} {t_rt_s}$

  • 象集

    • $R(X,Z)$ X、Z属性组
    • 当$t[X]=x$,x在R中象集为
    • 表示R中属性组上值为x的诸元组在Z上分量的集合

(1)选择

F是选择条件,逻辑表达式$X\theta Y$

$\theta$是比较运算符$(>,\geq,<,\leq,=,\neq)$

还可以加上逻辑运算符$(\wedge,\vee,\neg)$连接起来

(2)投影

从关系R(U)中取若干属性列并删去重复行,组成新的关系

(3)连接

(先乘再选取)

从两个关系的广义笛卡儿积 RxS中选取给定属性组(A和B)间满足比较条件的元组

  • 等值连接:$\theta$是=

(4)自然连接

(比连接多一个投影)

要求进行比较的分量必须是同名的属性组

选取在相同属性列上取值相等的元组,并去掉重复的属性列

U为R和S的全体集合

  • 悬浮元组
    • 自然连接的时候被舍弃的4
    • 填NULL是外连接 保留左 左外 保留右 右外

image-20241221152219791

(5)除

T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中

$R(X,Y)、S(Y,Z)$,Y可以有不同属性名 但必须出自相同域集

R中$X$的不同取值$x$对应$Y_x$要包含$\Pi_{Y}(S)$

就保留满足条件的$x$取值对应元组的集合

然后T剩下的属性是X

应用1

image-20241221154648636

image-20241221154702842

应用2

除法是一个属性可以有多个属性值

选择是一个属性只能有一个属性值

i:除数(属性列)的值包含了某个关系表中的该属性的全部值,那么直接把该表中的该属性列当做除数,被除数的属性在除数的基础上加上所求属性。

ii:除数(属性列)的值没有包含某个关系表中的该属性的全部值,那么可以自己构造一个关系,该关系只有该属性和其值组成。或者采用自身笛卡尔积加选择投影的方法。 image-20241221160308523

求选修了全部课程的学生学号和姓名

$\prod_{\mathrm{SNO,~CNO }}(\mathrm{SC})\div\prod_{\mathrm{CNO }}(\mathrm{C})\bowtie\prod_{\mathrm{SNO ,~SN}}(\mathrm{S})$

基本运算(数学角度 *)

并、差、笛卡儿积、投影、选择

表示其他运算:

  • 交:

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

  • 连接:

    $R\underset{A\theta B}{\bowtie} S=\underset{A\theta B}{\sigma}\left(R\times S\right)$

  • 除:

核心运算(数据库角度)

选择 投影 连接(or自然连接)

关系演算

谓词演算应用到关系运算中就是关系演算

  • 元组关系演算:元组是变量
  • 域关系演算:域是变量

元组演算

(2)差

(3)笛卡尔积

(4)投影

(5)选择

F’是公式F用t[i]代替运算对象i得到的等价公式

$t^{(x)}$代表t的目数是x

如果没有$t^{(x)}$代表t的目数和R的目数相等

image-20241221164007646

域关系演算

表示所有使$\Phi$为真的那些(x1, x2, … , xk)组成的元组集合,即表达了一个关系

  • xi代表域变量
  • $\Phi$为域关系演算公式,由 原子公式和运算符组成。

image-20241221164155030

关系运算的安全约束

  • 安全运算
    • 不产生无限关系(元组个数无限个)
    • 无穷验证
  • 安全表达式

    • 安全运算的运算表达式
  • 安全约束

    • 安全运算的限制

关系代数是安全运算,关系演算则不一定是

e.g.

  • 安全约束:
    • 对元组关系演算公式$\Phi$定义一个有限的符号集$DOM(\Phi)$
    • 运算结果及中间结果所产生的关系及其元组的各个分量都必须属于$DOM(\Phi)$
    • 组成:
      • $\Phi$中的所有常量
      • $\Phi$中出现的所有元组的所有分量值

image-20241221164416562

数据库数据语言

  • 数据定义(描述)语言DDL

    • 模式DDL、外模式DDL、内模式DDL
  • 数据操纵语言DML

    • 检索、插入、修改、删除 CURD
    • 联机交互方式 自含式语言,可独立使用,适用于终端直接查询;
    • 宿主语言方式 嵌入式语言,依附于宿主语言,是嵌入高级语言的程序中,以实现数据操作
  • 数据控制语言DCL
    • 完成数据库的安全性控制、完整性控制、并发控制

关系数据语言

特点

  • 一体化
  • 非过程化
  • 面向集合存取方式
  • 既可独立使用又可与主语言嵌套使用
  • 最简单、最规范化的数据结构
  • 核心:查询 查询语言
  • 数学基础:关系运算

分类

SQL

  • 结构化查询语言
  • 介于关系代数和关系演算之间
  • 集查询、DDL、DML、DCL于一体 高度非过程化
  • 关系数据库标准语言