第2章 关系模型
目录
1 关系模型的数据结构
1.1 基本术语
-
域:具有相同数据类型的值得集合,可是任意的费控有限先集合或者无限集合
- 域的基数:域的元素个数
1.2 笛卡尔积
所有域所有取值的一个组合
-
元祖:笛卡尔积中每一个元素叫做一个n元组,简称元组
-
分量:元组中的每一个值 d i d_i di叫做一个分量
-
笛卡尔积的基数:笛卡尔积的元素个数
-
表示方法:用二维表表示的时候,每行对应一个元组,每列对应一个域
1.3 关系
-
一个笛卡尔积 D 1 × D 2 × … × D n D_1\times D_2\times…\times D_n D1×D2×…×Dn的有限子集叫做在域 D 1 , D 2 , … , D n D_1,D_2,…,D_n D1,D2,…,Dn上的关系,表示为 R ( D 1 , D 2 , … , D n ) R(D_1,D_2,…,D_n) R(D1,D2,…,Dn)
-
关系中域的个数称为关系的元、目、度
-
包含n个域的关系称为n元关系
-
无限关系在数据库系统无意义
-
元组:关系中元素叫元组,通常用t表示
-
属性:每个域称为属性,n元关系有n个属性
-
实际应用:实际应用中是笛卡尔积中所取的有意义的子集
-
超码
-
能唯一表示元组的属性集合
-
一个人关系至少拥有一个超码(全部属性集)
-
-
候选码
-
是特殊的超码,其所有真子集都不构成超码
- 先看一个属性能不能有可以做候选码的,再看两个属性组合的,如果一个属性可以,那么两个属性组合的就不是候选码了,因为两个属性组合的一个真子集肯定是超码
-
具有唯一性(并不是只有一个候选码,而是候选码能唯一确定一个关系)和最小性
- 比如(学号)(姓名)两个候选码都能唯一确定一个关系
-
-
主码
-
当一个关系有多个候选码,那么选定一个作为主码
-
主属性: 主码包含的属性,不在主码中的属性则为非主属性
-
主属性的表示:加下划线
-
主码通常只有一个,而超码和候选码可能有多个,主码一经选择通常不变
-
-
关系的性质
-
规范化关系:满足属性值原子性,每个属性值不能分解,不能表中有表
-
非规范化关系:不满足属性原子性
-
1.4 关系模式(关系框架)
-
表示: R ( U , D , d o m , F ) R(U,D,dom,F) R(U,D,dom,F),通常简记为: R ( U ) / R ( A 1 , A 2 , … , A n ) R(U)/R(A_1,A_2,…,A_n) R(U)/R(A1,A2,…,An)
-
R:关系名
-
U:该关系的属性名集合
-
D:属性组U所来自的域
-
dom:属性到域的映射集合
-
F:属性建的数据依赖关系集合
-
-
关系模式:刻画了关系的结构(静态的、稳定的)
-
关系实例:关系中左右元组动态的、变化的
2 关系模型的数据操作
1 常用操作
增删改查
2 特点
集合操作方式,即操作的对象和结果都是集合。(一次一集合)
3 关系数据语言的种类
-
关系代数语言:用集合代数运算来表达查询要求(ISBL)
-
关系演算语言:用数理逻辑谓词来表达查询要求
-
元组演算语言(APLHA、QUEL)
-
域演算语言(QBE)
-
-
具有双重特点的语言:SQL
3 关系模型的完整性约束
为维护数据库数据与现实世界的一致性,对关系数据库的操作必须有一定的约束条件,这就是关系模型的完整性约束
3.1 实体完整性
-
实体完整性规则:组成主码的属性不能有空值(否则就无法区分实体)
例如学号为主码,所以不能为空
-
大部分DBMS支持实体完整性约束检查,但是不是强制性的
3.2 参照完整性
-
关系间的引用(外码)
如果关系R属性组有一部分是S的主码,那么这一部分是R的外码,其中R为参照关系,S为被参照关系
-
规则
-
外码要么取空值,要么引用一个实际存在的主码值
-
参照完整性约束考虑不同关系之间或动议关系的不同元之间的制约
-
3.3 用户定义的完整性
-
针对某一具体关系数据库的约束条件,主要反映在语义上(例如学分的取值只能为1,1.5,2)
-
关系模型硬提供定义和检验这类完整性的机制一遍统一的系统的方法处理他们
4 关系代数
4.1 概述
是对关系进行集合代数的运算,是一种抽象的查询语句,用关系的运算来表达查询
-
关系代数运算的三要素
-
运算对象:关系
-
运算结果:关系
-
运算符:4类
-
-
关系代数运算的分类
-
传统:并、差、交、广义笛卡尔积
-
关系运算:选择、投影、连接、除
-
-
表示记号
4.2 传统的集合运算
-
并:具有相同的域的属性(实际上就是两个表相接)
-
差:具有相同的域的属性(实际上就是两个表相减)
-
交:类似
-
广义笛卡尔积:两个表拼合
4.3 专门的关系运算
-
选择: σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } \sigma_{F}(R)=\{t \mid t \in R \wedge F(t)=' 真' \} σF(R)={t∣t∈R∧F(t)=′真′}
选择是从行的角度进行运算
-
σ B = b ( R ) \sigma_{B=b}(R) σB=b(R),就是选择B=b的行
-
σ 性 别 = ′ 男 ′ ( 学 生 ) \sigma _{性别 = '男'}(学生) σ性别=′男′(学生),就是选择性别为男的学生
-
σ 性 别 = ′ 男 ′ ∧ 年 龄 > 20 ( 学 生 ) \sigma _{性别 = '男' \wedge 年龄 >20 }(学生) σ性别=′男′∧年龄>20(学生),选择性别为男,并且年龄大于20的学生
-
-
投影: π A ( R ) = { t [ A ] ∣ t ∈ R } \pi_{A}(R)=\{t [ A ] \mid t \in R\} πA(R)={t[A]∣t∈R}
投影就是从列的角度进行运算
- π A , B ( R ) \pi_{A, B}(R) πA,B(R),选择AB两列组成新表(选择出来的时候要消除重复行)
-
连接: R ⋈ θ S = { t r t ^ s ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } \mathbf{R} \bowtie_{\theta} \mathbf{S}=\left\{\widehat{\mathbf{t}_{\mathrm{r}} \mathbf{t}}_{\mathbf{s}} \mid \mathbf{t}_{\mathrm{r}} \in \mathbf{R} \wedge \mathbf{t}_{\mathbf{s}} \in \mathbf{S} \wedge \mathrm{t}_{\mathrm{r}}[A] \theta t_{\mathrm{s}}[B]\right\} R⋈θS={trt s∣tr∈R∧ts∈S∧tr[A]θts[B]}
-
AB分别为属性常量
-
θ \theta θ为比较运算符
其实本质上 R ⋈ _ θ S = σ _ θ ( R × S ) R \bowtie\_{\theta} S=\sigma\_{\theta}(R \times S) R⋈_θS=σ_θ(R×S)
-
两种连接运算
-
等值连接( θ \theta θ 为等号的连接为等值连接)
-
自然连接(没有 θ \theta θ,R和S具有相同的属性就能相连)
-
-
4.4 关系代数表达式
不考虑括号,优先级依次为
-
选择、投影
-
成绩、相交、连接、除法
-
合并、求差