db_2 关系数据库
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中某个元组的主码值
用户定义完整性
- 针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求
- 关系模型定义和检验此类完整性的机制
关系操作
关系数据操作方式的特点是集合操作
操作的对象与结果都是集合
关系数据操作的基础是“关系运算”
- 关系代数 (代数方式)
- 关系演算(逻辑方式)
- 元组关系演算
- 域关系演算
关系代数
传统集合运算
(1)并
(2)差
(3)交
(4)广义笛卡儿积(乘)
R度m S度n RxS度m+n
k1个元组和k2个元组 笛卡儿积 成为k1*k2个元组
注意:属性名如果相同 应该标识一下R.A S.A
专门集合运算
$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是外连接 保留左 左外 保留右 右外
(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
应用2
除法是一个属性可以有多个属性值
选择是一个属性只能有一个属性值
i:除数(属性列)的值包含了某个关系表中的该属性的全部值,那么直接把该表中的该属性列当做除数,被除数的属性在除数的基础上加上所求属性。
ii:除数(属性列)的值没有包含某个关系表中的该属性的全部值,那么可以自己构造一个关系,该关系只有该属性和其值组成。或者采用自身笛卡尔积加选择投影的方法。
求选修了全部课程的学生学号和姓名
$\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的目数相等
域关系演算
表示所有使$\Phi$为真的那些(x1, x2, … , xk)组成的元组集合,即表达了一个关系
- xi代表域变量
- $\Phi$为域关系演算公式,由 原子公式和运算符组成。
关系运算的安全约束
- 安全运算
- 不产生无限关系(元组个数无限个)
- 无穷验证
安全表达式
- 安全运算的运算表达式
安全约束
- 安全运算的限制
关系代数是安全运算,关系演算则不一定是
e.g.
- 安全约束:
- 对元组关系演算公式$\Phi$定义一个有限的符号集$DOM(\Phi)$
- 运算结果及中间结果所产生的关系及其元组的各个分量都必须属于$DOM(\Phi)$
- 组成:
- $\Phi$中的所有常量
- $\Phi$中出现的所有元组的所有分量值
数据库数据语言
数据定义(描述)语言DDL
- 模式DDL、外模式DDL、内模式DDL
数据操纵语言DML
- 检索、插入、修改、删除 CURD
- 联机交互方式 自含式语言,可独立使用,适用于终端直接查询;
- 宿主语言方式 嵌入式语言,依附于宿主语言,是嵌入高级语言的程序中,以实现数据操作
- 数据控制语言DCL
- 完成数据库的安全性控制、完整性控制、并发控制
关系数据语言
特点
- 一体化
- 非过程化
- 面向集合存取方式
- 既可独立使用又可与主语言嵌套使用
- 最简单、最规范化的数据结构
- 核心:查询 查询语言
- 数学基础:关系运算
分类
SQL
- 结构化查询语言
- 介于关系代数和关系演算之间
- 集查询、DDL、DML、DCL于一体 高度非过程化
- 关系数据库标准语言