数据库原理笔记C03 关系模型
3.1 关系数据库的结构
关系模型的数据结构的逻辑形势是一张二维表,这个二维表
就叫做关系
。
关系模型的基本术语
- 关系/表:一个关系就是一张二维表
- 元组/行:表中的一行就是一个元组
- 属性/列:表中的一列就是一个属性
- 值域:关系中的
每个属性
都有一个取值范围,这个取值范围称为属性的值域 - 分量:元组的某一个属性值就是一个分量
- 关系模式:关系模式是对关系的结构性描述
- 表的内容:指表的元组的集合
- 基数:关系中元组的个属叫做技术
- 度数/元数:关系中属性的个属叫做元数
- 关系数据库:是表或者关系的集合
- 空值(NULL):是指未知的活着尚未定义的属性值
关系的键
- 超键:在一个关系中,某一个属性或属性集合的值可唯一地标识元组。
- 候选键:一个属性或属性集合的值能唯一标识一个关系的元组而又不含有多余的属性。
- 主属性:构成候选键的诸属性。
- 非主属性:不包含在任意候选键中的属性。
- 全键:关系的全部属性构成关系的候选键。
- 主键:有时一个关系中有多个侯选键,此时可以选择一个作为插入,删除或检索元组的操作变量。被选用的候选键称为主键。每一个关系都有且只有一个主键。
- 外键:是指关系R中的属性A不是关系R的主键,但A是另一个关系S的主键,则属性A就是关系R的外键。其中R是
参照关系
,S是被参照关系
。 - 外键在关系R中的取值有两种可能:或为空值,或必须是被参照关系S中已有的属性值。
- 外键值是否允许为空值,主要依赖于应用环境的语义。
基于集合论的关系定义
笛卡尔乘积的运算符号定义为 × ,是一个定义在集合之上的代数系统运算符。它的算子是单个的集合。
两个数据域的笛卡尔乘积即:左边数据域的每一个元素去组合右边数据域的每一个元素,形成一个元组的集合。
当被处理的各个关系之间毫无联系的时候,可以通过笛卡尔积来实现我们的目标。
P36 关系的度
关系规则
- 第一范式规则: 关系数据库中表的每一分量都是不可分割的基本数据项,同一分量中不能有多个值。即关系模型不允许含有
多值属性
,并且属性的类型必须是简单类型
。- 家庭住址包括省市接街道,不是简单类型
- 家庭成员值可能有多个,是多值属性
- 实体完整性规则: 定义关系中主键的取值不能为空值。
- 参照完整性规则: 若属性或属性组F是关系R的外键,它与关系S的主键Ks相对应,则对于R中每个元组在F上的值或者取空值,或者等于S中某个元组的主键值。
- 定义了外键和主键之间的引用规则,是数据库一致性和准确性的保证。
- 用户定义的完整性规则: 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
- 关系的其他规则:
- 表中同一属性的数据具有同质性,即同一列中的分量是同一类型的数据,来自同一个域。
- 同一关系的属性名具有不能重复性,即不同的属性要定义不同的属性名,同一关系中不同属性的数据可出自同一个域。
- 关系中的元组位置具有顺序无关性,即关系元组的顺序可以任意交换。
- 关系中的列位置具有顺序无关性,即关系中的属性顺序不影响使用,属性的次序可以任意交换。
关系操作
常用的关系操作:包括查询操作和更新操作。
查询操作:选择、投影、连接、除、并、差等操作
更新操作:增加、删除、修改等操作
关系操作的表示方式:
- 关系代数:抽象的查询语言,用代数运算来表达关系的查询要求和条件,是关系数据库运算的基础。
- 关系演算:抽象的查询语言,用谓词来表达关系查询要求和条件。
- 结构化查询语言(SQL):兼用关系代数和关系演算来表达关系的查询要求和条件。
3.2 关系代数
传统的集合运算P42
名称 | 符号 | 实例 |
---|---|---|
并 | ∪ | R∪S |
交 | ∩ | R∩S |
差 | − | R-S |
广义笛卡尔积 | × | R×S |
广义笛卡尔积: 两个度分别为 n 元和 m 元的关系 R 和 S 的笛卡尔是一个 (n+m) 列的元组的集合。组的前 n 列是关系 R 的一个元组,后 m 列是关系 S 的一个元组,记作 R × S。 |
自然关系运算
名称 | 符号 | 实例 |
---|---|---|
投影 | πA(R) | πcid(R) |
选择 | σF | σsno=’301’(R) |
连接/θ连接 | ⋈ | R ⋈ S |
除法 | ÷ | R ÷ S |
不等于可以表达为 ‘<>’
选择
:(关系的水平方向)是从关系 R 中选择满足给定条件的元组,记作 σF(R)。投影
:(关系的垂直方向)在关系 R 中选出所需要的属性列 A 组成新的关系,记作 πA(R)。连接
:从 R 与 S的笛卡尔积中选取属性间满足一定条件的元组,可由基本的关系运算笛卡尔积和选取运算导出,表示为:R⋈AθBS=σAθB(R×S)等值连接
:当 θ 为「=」时,称之为等值链接,记为: R⋈A=BS自然连接
:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复的属性列去掉,记为: R⋈S
以后如无特殊说明,则连接均指自然连接
除法
:求 R÷S,取关系R中有的但S中没有的属性组,如:A,取唯一A属性组值的象集,对比S可知,关系S存在于 a [i] 象集中。P48,P49例3.19
关系代数的综合实例
扩展的关系代数运算
外连接是自然连接的扩展/特例,可以处理缺失的信息。
名称 | 符号 | 实例 |
---|---|---|
外连接 | ⋈O | R ⋈O S |
左外连接 | ⋈LO | R ⋈LO S |
右外连接 | ⋈RO | R ⋈RO S |
- 左外连接=内连接+左边表中失配的元组
- 右外连接=内连接+右边表中失配的元组
- 全外连接=内连接+左边表中失配的元组+右边表中失配的元组
3.3 关系演算
关系演算
:在关系运算中,用数理逻辑中的谓词公式来表达查询的要求的方式。关系演算是一种非过程化的语言。根据谓词变量对象的不同,分为元组关系演算和域关系演算。
关系代数和关系演算的表达式可以相互等价转换。
「域关系演算、元组关系演算、关系代数三者的表达能力是一样的。」
元组关系演算
元组关系演算:用元组集
表示关系运算的结果,表达形式一般为{ t | P(t) },它是使所有P(t)为真的所有元组t构成的集合。
t是元组变量,P(t)是公式,它由原子公式和运算符组成。
域关系演算
域关系演算:用元组变量的分量
表示关系运算的结果,表达形式一般为{ ( t 1 , t 2 ,…,t k ) | P( t 1, t 2,…, t k) },它是使P( t 1, t 2,…, t k)为真的那些域变量(元组分量的变量) t 1 , t 2 ,…,t k 组成的元组的集合。
- t 1 , t 2 ,…,t k 是元组分量的变量,P(t)是公式,它由原子公式和运算符组成。
- 域关系演算和元组关系演算是类似的,不同之处是用域变量代替元组变量的每一个分量,域变量的变化范围是某个值域而不是一个关系。
3.4 关系代数表达式的优化
查询优化步骤
- 将查询需求转换成某种内部表示,通常是语法树。
- 根据一定的等价变换规则把语法树转换成标准/优化形式。
- 选择低层的操作算法。
- 生成查询计划。
查询优化策略
- 选择运算应尽早执行。
- 把投影运算和选择运算同时进行。
- 把投影操作与它前面或者后面的一个双目运算结合起来,不必为投影专门扫描一遍关系。
- 在执行连接运算之前,可对需要连接的关系进行适当的预处理,如建索引或者排序。
- 把笛卡尔乘积和其后面的选择运算合并成连接运算。
- 存储公用子代表式(重复出现的子表达式)。