### 文章目录
- [@[toc]](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [2.1|关系数据结构及形式化定义](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [关系](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [码](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [关系类型](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [基本关系的性质](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [关系模式](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [关系模型的存储结构](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [2.2|关系操作](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [查询](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [关系语言的分类](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [2.3|关系的完整性](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [实体完整性](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [参照完整性](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [用户定义的完整性](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [2.4|关系代数](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [传统的集合运算](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [并](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [差](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [交](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [笛卡尔积](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [专门的关系运算](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [选择](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [投影](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [连接](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [等值连接](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [自然连接](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [除运算](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
- [示例](#文章目录 @[toc] 2.1|关系数据结构及形式化定义 关系 码 关系类型 基本关系的性质 关系模式 关系模型的存储结构 2.2|关系操作 查询 关系语言的分类 2.3|关系的完整性 实体完整性 参照完整性 用户定义的完整性 2.4|关系代数 传统的集合运算 并 差 交 笛卡尔积 专门的关系运算 选择 投影 连接 等值连接 自然连接 除运算 示例)
个人主页:丷从心
系列专栏:数据库
2.1|关系数据结构及形式化定义
关系
- 关系是笛卡尔积的有限子集,是一张二维表
码
- 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码
- 若一个关系有多个候选码,则选定其中一个为主码
- 候选码的诸属性称为主属性,不包含在任何候选码中的属性称为非主属性或非码属性
- 在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码
关系类型
- 基本关系(基本表或基表):实际存在的表
- 查询表:查询结果对应的表
- 视图表:由基本表或其他视图导出的表,是虚表,不对应实际存储的数据
基本关系的性质
- 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域
- 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
- 列的顺序无所谓,即列的次序可以任意交换
- 任意两个元组的候选码不能取相同的值
- 行的顺序无所谓,即行的次序可以任意交换
- 分量必须取原子值,即每一个分量都必须是不可分的数据项
关系模式
-
关系的描述称为关系模式,可以形式化地表示为 R ( U , D , D O M , F ) R(U , D , DOM , F) R(U,D,DOM,F),其中 R R R为关系名, U U U为组成该关系的属性名集合, D D D为 U U U中属性所来自的域, D O M DOM DOM为属性向域的映像集合, F F F为属性间数据的依赖关系集合
-
关系是关系模式在某一时刻的状态或内容
关系模型的存储结构
- 在关系数据库的物理组织中,有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成,有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理
2.2|关系操作
- 关系操作的特点是集合操作方式,即操作的对象和结果都是集合,这种操作方式也称为一次一集合的方式,非关系数据模型的数据操作方式则为一次一记录的方式
查询
- 查询操作可以分为选择、投影、连接、除、并、差、交、笛卡尔积,其中选择、投影、并、差、笛卡尔积是 5 5 5种基本操作
关系语言的分类
- 关系代数语言
- 关系演算语言
- 元组关系演算语言
- 域关系演算语言
- 具有关系代数和关系演算双重特点的结构化查询语言 S Q L SQL SQL
2.3|关系的完整性
实体完整性
- 若属性(指一个或一组属性) A A A是基本关系 R R R的主属性,则 A A A不能取空值
参照完整性
- 设 F F F是基本关系 R R R的一个或一组属性,但不是关系 R R R的码, K s K_{s} Ks是基本关系 S S S的主码,如果 F F F与 K s K_{s} Ks相对应,则称 F F F是 R R R的外码,并称基本关系 R R R为参照关系,基本关系 S S S为被参照关系或目标关系,关系 R R R和 S S S不一定是不同的关系
- 若属性(或属性组) F F F是基本关系 R R R的外码,它与基本关系 S S S的主码 K s K_{s} Ks相对应(基本关系 R R R和 S S S不一定是不同的关系),则对于 R R R中每个元组在 F F F上的值必须
- 或者取空值( F F F的每个属性值均为空值)
- 或者等于 S S S中某个元组的主码值
用户定义的完整性
2.4|关系代数
传统的集合运算
- 传统的集合运算是二目运算,包括并、差、交、笛卡尔积 4 4 4种运算
- 设关系 R R R和关系 S S S具有相同的目 n n n,且相应的属性取自同一个域, t t t是元组变量, t ∈ R t \in R t∈R表示 t t t是 R R R的一个元组,可以定义并、差、交、笛卡尔积运算如下
并
R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R \cup S = \set{t \mid t \in R \vee t \in S} R∪S={t∣t∈R∨t∈S}
差
R − S = { t ∣ t ∈ R ∧ t ∉ S } R - S = \set{t \mid t \in R \wedge t \notin S} R−S={t∣t∈R∧t∈/S}
交
R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R \cap S = \set{t \mid t \in R \wedge t \in S} R∩S={t∣t∈R∧t∈S}
笛卡尔积
- 两个分别为 n n n目和 m m m目的关系 R R R和 S S S的笛卡尔积是一个 n + m n + m n+m列的元组的集合,元组的前 n n n列是关系 R R R的一个元组,后 m m m列是关系 S S S的一个元组,记作
R × S = { t r t s ^ ∣ t r ∈ R ∧ t s ∈ S } R \times S = \set{\widehat{t_{r} t_{s}} \mid t_{r} \in R \wedge t_{s} \in S} R×S={trts ∣tr∈R∧ts∈S}
专门的关系运算
- 专门的关系运算包括选择、投影、连接、除运算
- 设关系模式为 R ( A 1 , A 2 , ⋯ , A n ) R(A_{1} , A_{2} , \cdots , A_{n}) R(A1,A2,⋯,An),它的一个关系设为 R R R, t ∈ R t \in R t∈R表示 t t t是 R R R的一个元组, t [ A i ] t[A_{i}] t[Ai]则表示元组 t t t中相应于属性 A i A_{i} Ai的一个分量,若 A = { A i 1 , A i 2 , ⋯ , A i k } A = \set{A_{i1} , A_{i2} , \cdots , A_{ik}} A={Ai1,Ai2,⋯,Aik},其中 A i 1 A_{i1} Ai1, A i 2 A_{i2} Ai2, ⋯ \cdots ⋯, A i k A_{ik} Aik是 A 1 A_{1} A1, A 2 A_{2} A2, ⋯ \cdots ⋯, A n A_{n} An中的一部分,则 A A A称为属性列或属性组, t [ A ] = ( t [ A i 1 ] , t [ A i 2 ] , ⋯ , t [ A i k ] ) t[A] = (t[A_{i1}] , t[A_{i2}] , \cdots , t[A_{ik}]) t[A]=(t[Ai1],t[Ai2],⋯,t[Aik])表示元组 t t t在属性列 A A A上诸分量的集合, A ˉ \bar{A} Aˉ则表示 { A 1 , A 2 , ⋯ , A n } \set{A_{1} , A_{2} , \cdots , A_{n}} {A1,A2,⋯,An}中去掉 { A i 1 , A i 2 , ⋯ A i k } \set{A_{i1} , A_{i2} , \cdots A_{ik}} {Ai1,Ai2,⋯Aik}后剩余的属性组
- R R R为 n n n目关系, S S S为 m m m目关系, t r ∈ R t_{r} \in R tr∈R, t s ∈ S t_{s} \in S ts∈S, t r t s ^ \widehat{t_{r} t_{s}} trts 称为元组的连接或元组的串接
- 给定一个关系 R ( X , Z ) R(X , Z) R(X,Z), X X X和 Z Z Z为属性组,当 t [ X ] = x t[X] = x t[X]=x时, x x x在 R R R中的象集定义为 Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_{x} = \set{t[Z] \mid t \in R , t[X] = x} Zx={t[Z]∣t∈R,t[X]=x},它表示 R R R中属性组 X X X上值为 x x x的诸元组在 Z Z Z上分量的集合
选择
- 选择又称为限制,在关系 R R R中选择满足给定条件的诸元组,记作
σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = 真 } \sigma_{F}(R) = \set{t \mid t \in R \wedge F(t) = 真} σF(R)={t∣t∈R∧F(t)=真}
- 其中 F F F表示选择条件,是一个逻辑表达式
投影
- 关系 R R R上的投影是从 R R R中选择出若干属性列组成新的关系,记作
Π A R = { t [ A ] ∣ t ∈ R } \Pi_{A}{R} = \set{t[A] \mid t \in R} ΠAR={t[A]∣t∈R}
- 其中 A A A为 R R R中的属性列
连接
- 连接也称为 θ \theta θ连接,从两个关系的笛卡尔积中选取属性间满足一定条件的元组,记作
R ⋈ A θ B S = { t r t s ^ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R \substack{\Join \\ A \theta B} S = \set{\widehat{t_{r} t_{s}} \mid t_{r} \in R \wedge t_{s} \in S \wedge t_{r}[A] \theta t_{s}[B]} R⋈AθBS={trts ∣tr∈R∧ts∈S∧tr[A]θts[B]}
- 其中, A A A和 B B B分别为 R R R和 S S S上列数相等且可比的属性组, θ \theta θ是比较运算符
等值连接
- θ \theta θ为" = = ="的连接运算称为等值连接
自然连接
- 自然连接是一种特殊的等值连接,要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉,即若 R R R和 S S S中具有相同的属性组 B B B, U U U为 R R R和 S S S的全体属性集合,则自然连接可记作
R ⋈ S = { t r t s ^ [ U − B ] ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ B ] = t s [ B ] } R \Join S = \set{\widehat{t_{r} t_{s}}[U - B] \mid t_{r} \in R \wedge t_{s} \in S \wedge t_{r}[B] = t_{s}[B]} R⋈S={trts [U−B]∣tr∈R∧ts∈S∧tr[B]=ts[B]}
- 在做自然连接时,被舍弃的元组称为悬浮元组,如果把悬浮元组也保存在结果中,而在其他属性上填空值,那么这种连接就叫做外连接,如果只保留左边关系 R R R中的悬浮元组就叫做左外连接,如果只保留右边关系 S S S中的悬浮元组就叫做右外连接
除运算
- 设关系 R R R除以关系 S S S的结果为关系 T T T,则 T T T包含所有在 R R R但不在 S S S中的属性及其值,且 T T T的元组与 S S S的元组的所有组合都在 R R R中
- 给定关系 R ( X , Y ) R(X , Y) R(X,Y)和 S ( Y , Z ) S(Y , Z) S(Y,Z),其中 X X X、 Y Y Y、 Z Z Z为属性组, R R R中 Y Y Y与 S S S中的 Y Y Y可以有不同的属性名,但必须出自相同的域集, R R R与 S S S的除运算得到一个新的关系 P ( X ) P(X) P(X), P P P是 R R R中满足下列条件的元组在 X X X属性列上的投影:元组在 X X X上分量值 x x x的象集 Y x Y_{x} Yx包含 S S S在 Y Y Y上投影的集合,记作
R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Π Y ( S ) ⊆ Y x } R \div S = \set{t_{r}[X] \mid t_{r} \in R \wedge \Pi_{Y}(S) \subseteq Y_{x}} R÷S={tr[X]∣tr∈R∧ΠY(S)⊆Yx}
- 其中 Y x Y_{x} Yx为 x x x在 R R R中的象集, x = t r [ X ] x = t_{r}[X] x=tr[X]
示例
- 以学生 − - −课程数据库为例,查询至少选修 1 1 1号课程和 3 3 3号课程的学生号码
- 首先建立一个临时关系 K K K
-
- 然后求 Π S n o , C n o ( S C ) ÷ K \Pi_{Sno , Cno}(SC) \div K ΠSno,Cno(SC)÷K