2020-数据管理基础-ch02-关系模型
ch02-关系模型
1. 数据模型
- 是一组定义,描述了如何在概念上将现实世界的数据表示为计算机化信息。
- 它还描述了可用于访问和更新此信息的操作类型。
2. CAP数据库示例
- 以上为同属一个数据库的多张数据表
2.1. 关系模型的基本概念
关系数据库管理系统 | 关系模型 | 文件系统 |
---|---|---|
表 | 关系 | 记录文件 |
列 | 属性 | 域 |
行 | 元组 | 记录 |
表头 | 模式 | 记录类型 |
- 数据库是表(关系)的集合。
- 表的标题是表的列名的集合,也被叫做关系模式(组成关系的属性的集合),记为Head(T)。
- 数据库模式:数据库的所有关系模式的集合
- 表的内容:表的行(元组)集合
- 表的基数:表的行数
- 域一般定义为可以被用作表的属性的常数的集合,类似枚举,记为Domian(A) = { 列A的取值范围 }
- SQL预留的数据类型:real、integer、char(n)、date等
- 大部分商业数据库不支持枚举类型
- 域char(n)和char(n + 1)无法进行比较
2.2. 数据独立性
- 当你执行一个问题的查询时,即使数据本身发生了变化,但是这个查询仍然能回答你的问题。
- 也就是查询语句与表内容无关,仅与列名有关
3. 关系规则
3.1. 第一范式规则:关系模型不允许有多值属性
- 内容:在定义的表中,关系模型不允许含有多值属性(有时称为重复字段)和有内部结构(比如记录类型)的列。
- 第一范式强调了属性的原子性,不允许含有多值属性(某行某列有多个值)和含有内部结构的列(列类型是一个对象)
3.2. 第二条规则:只能基于内容存取行规则
- 只能通过行的内容即每一行所在的属性值来检索列。
- 第二条规则说明了行和列没有次序,可以随意进行交换
3.3. 第三条规则:行唯一性规则
- 关系中的任何两个元组在同一个时刻不能是完全相同的,保证有键的存在。
- 可以推出每一个表都至少有一个键
3.4. 第四条规则:实体完整性规则
- 表T中的任意行在主键列的取值都不允许为空值。
3.5. 备注
- 虽然上面几个规则并适用于部分数据库,但是在本章我们在其适用继续讨论。
4. 键、超键和空值
4.1. 键和超键
- 键/关键字(key):最小的超键,没有任何一个真子集是超键
- 超键(superkey):在二维表中,其取值具有唯一性的属性集合被称为该表的超键,满足上图条件1,但是不满足条件2的为超键。
- 最小的超键是候选键
4.2. 键的推导
- 首先检查有没有单一属性可以成为一个键。
- 然后排除不可能包含在键中的属性(上图中的D,没有任何区分度)。
- 将剩下的排列组合,然后检查键的定义。
- 注:关系规则3保证了一个关系中至少有一个键。
- 答案:AB、AC和BC都是这个表的键。
4.3. 每个表都至少有一个键
- 由于关系规则3,所以我们可以知道,所有属性的集合S1,必然为这些属性的一个超键
- 然后两种可能:S1为键,或者S1的子集S2也是超键,然后链式递归。
- 课本25页
4.4. 主键
- 表T的主键是被数据库设计者选择出来作为表T中特定的行的唯一性标识符的候选键。
- 主键的值不可以为空值
4.5. 空值
- 空值(null value):当一个具体值未知或不合适时填充表
- 不能够进行比较(等于 也不行)
- 空值是不会被筛选出来的,即便是< x或者>=x
- 通过特殊的语句才能检查出来,比如IS NULL。(非空 NOT IS NULL)
5. 关系代数
- 关系代数是为了演示一个查询语言从关系数据库系统中检索信息的潜力。
- 关系代数包含集合运算和自然关系运算两部分
5.1. 关系代数的基本运算
- 集合运算依赖于表是行的集合
- 自然关系运算依赖于表的结构
5.2. 集合运算
- 包含并、交、差和乘积。
- 前三种运算要求表是兼容表才可以进行运算。
5.2.1. 相容表(Compatible Table)
- 列类型不能不同
- 列数量不能不同
- 列名不能不同
- 列顺序可以不同
- 只有相容表才可以做交、并、差的操作
5.2.2. 并、交、差
- R和S两个兼容表。
- R和S的并,是具有相同标题的,由或者属于R或者属于S或者属于二者的所有行组成的。
- R和S的交,是具有相同标题的,由既属于R又属于S的行组成的。
- R和S的差,R-S,是具有相同的标题的,由属于R而不属于S的行组成。
5.2.3. 并、交、差的性质
- 并和交满足交换律和结合律
- R-S=R-(R∩S) ≠ S-R=S-(R∩S)
- R∩S=R-(R-S)=S-(S-R)
- (R-S)∩(S-R)=∅
5.2.4. 赋值和别名
- 赋值运算符
:=
- 赋值运算符合别名搭配使用可以保存中间结果
5.2.5. 笛卡尔积
- 笛卡儿积:集合的笛卡尔积由所有的k元组(e1,e2,…,ek)组成。
- 如果Head(T) = A1…An,那么表T是Domain(A1)…Domain(An)的笛卡尔积的一个子集。
5.2.6. 乘积
- 乘积是基于笛卡尔积的
- 注意如上乘积后的表头,使用R.S形式的
.
限定符来明确原来属于的位置
5.3. 自然关系运算
5.3.1. 投影(π)
- 记为 或R[Ai1,…,Aik]。
- 选择就选择对应的列,避免造成重复运算。
- 如果有重复的就会处理的只剩下非相同列。
5.3.2. 选择(δ)
- 记为S where C或
- 运用逻辑表达式来完成联合查找
- 课本33页例子(注意通过添加条件,保证查询结果唯一)
- 查询应该避免内容依赖
5.3.3. 关系代数的优先级
- 投影 > 选择 > 乘积 > 连接、除法 > 交 > 并、差
5.3.4. 连接(∞)
- 联接包括等值联接和自然联接
- 通过联接可以避免笛卡尔积(简化)
- 联接过程中执行必要的映射,不然可能会出现错误
- 外连接
- 左外连接(右表缺失值为null)可以反向重构
- 右外链接(做表缺失值为null)可以反向重构
- Theta连接:R ∞F S = (R * S) where F(按照条件F进行连接)
5.3.5. 除法(÷)
- 如果R=T*S,那么T=R÷S,S=R÷T
- 如果R=T÷S,那么R*S包含于T
- 除法往往用来统计都怎么样了(所有)
- 结果最好也进行投影得到最小的子集
5.4. 复杂查询例子
- 课本上还有例子
- 课件的例子可以再看一看
5.4.1. 查找最大值
5.4.2. 反向思维
- 注意反向思维的时候注意全集是不是找对了,因为没有买A的客户还包含没有买东西的客户
- 注意理解中文表达含义
5.4.3. 多解思维
- 有很多情况是有多种解决方案的,保证自己正确即可
5.4.4. 复杂的排查
6. 运算依赖
- R和S的连接可以用积、选择投影运算以及赋值算子重写。
- 课本42页(证明):作为SQL没有除法的解释。
7. 关系完备
- SQL语言如果能达成和关系操作同样的功能,就称为关系完备的。
8. 难点
- 查询条件带有‘否定’语义:‘不等’比较 & 减法运算
- 使用表联接查询,还是使用除法?
- 正确使用自然连接运算 和 除法运算
- 表的自联接结
2020-数据管理基础-ch02-关系模型
https://spricoder.github.io/2020/07/03/2020-Fundamentals-of-Data-Management/2020-Fundamentals-of-Data-Management-ch02-%E5%85%B3%E7%B3%BB%E6%A8%A1%E5%9E%8B/