数据库系统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 存在相容性,当且仅当:
- 关系 R 与关系 S 的属性数目相同。
- 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协议 。转载请注明出处!