"数据库之关系数据库部分的详解,期末特种兵"
2.1 关系数据库的结构
1.关系模型的组成部分
1. 描述DB的各种数据的基本结构形式(Table/Relation)
2. 描述Table和Table之间所可能发生的各种操作(关系运算)
3. 描述这些操作所遵循的约束条件(完整性约束)
2.一些关系模型中的术语
1. 关系:表
2. 元组:行
3. 属性:列
4. 关系实例:一个关系的特定实例,关系实例包含一组特定的行
5. 域:每个属性都存在一个允许取值的集合
6. 原子的:如果一个域中的元素被认为是不可再分的单元
7. 空值:表示值未知或者不存在
8. 域的基数:集合中元素的个数
9. 关系:笛卡尔积中具有某一方面意义的那些元组被称为一个关系
10. 分量:元组中的一个属性值
2.2 数据库模式
1.关系模式:
一般一个关系模式由一个属性列表及各属性所对应的域组成
可用R(A1:D1,A2:D2,...,An:Dn)表示
可简记为R(A1,A2,...,An)
Ai表示属性,Di表示域,n是关系的度或者目,关系中元组的个数称为关系的基数
2.关系模式与关系
1. 同一关系模式下,可有很多的关系
2. 关系模式是关系的结构,关系是关系模式在某一时刻的数据
3. 关系模式是稳定的;而关系是某一时刻的值,是随时间变化的
3.关系的特性
1. 列是同质:每一列的分量来自同一个域,具有相同的数据类型
2. 不同的列可以来自同一个域,称其中每一列为一个属性,不同的属性要给予不同的属性名
3. 列位置互换性和行位置互换性
4. 关系中任意两个元组不能完全相同(在现实中的表可能不遵守此特性),此为关系和表的差别
5. 属性不可再分(关系的第一范式)
2.3 码
1.超码super key
形式:一个或多个属性的集合
作用:在一个关系中唯一地标识一个元组
特点:
1. 可能包含无关属性
2. 超码的任意超集也是超码。(通俗讲,就是同一个关系r上,如果某个属性集合S包含超码K,即K是S的子集,那么S也是 r 的超码)
3. 一张表(一个关系)一定有超码,因为至少所有属性的组合一定是超码,能唯一确定一个元组
2.候选码candidate key
形式:一个或多个属性的集合
作用:在一个关系中唯一地标识一个元组
特点:
1. 是超码的一个子集
2. 任意真子集都不可能是超码,候选码就是**最小的超码**
3. 没有无关属性
4. 不唯一
3.主码primary key
形式:一个或多个属性的集合
作用:在一个关系中唯一地标识一个元组
特点:
1. 是候选码之一
2. 唯一或没有
3. 由数据库设计者指定,不指定的话表就没有主码
4.主属性与非主属性
包含在任意一个候选码中的属性被称为主属性,而其他属性被称为非主属性
5.外码foreign key(两个关系连接的纽带)
关系 r1 的属性中包含关系 r2的主码 ,设这个属性为 k,k 就是 r1 的外码
r1 是 k 依赖的参照关系(referencing relation)
r2 是 k 的被参照关系(referenced relation)
6.实体完整性
关系的主码中的属性值不能为空值
7.空值的含义
不知道,不存在或无意义的值
有空值需要特殊处理
8.参照完整性:
外码可以取空值
若非空值,必须取主码那个表中的某个值
9.用户自定义完整性
用户根据具体的应用环境定义的完整性约束条件
10.DBMS对关系完整性的支持
1. 实体完整性和参照完整性由DBMS自动支持
2. 使用户可以自行定义关于完整性约束条件
3. 当有更新完成时,DBMS将自动按照完整性约束检查更新操作正确性,是否符合用户自定义的完整性
2.4 模式图
一个带有主码外码约束的数据库模式的表示方法
主码属性用下划线标注,外码约束用从引用关系的外码属性指向被引用关系的主码属性的箭头来表示
2.5 关系查询语言
查询语言:
用户用来从数据库请求获取信息的语言
分为命令式、函数式以及声明式
**命令式查询语言**中,用户指导系统在数据库上执行特定的运算序列以计算出所需的结果;这类语言通常有一个状态变量的概念,状态变量在计算的过程中被更新
**函数式查询语言**中,计算被表示为对函数的求值,这些函数可以在数据库中的数据上运行或在其他函数给出的结果上运行;函数没有附带作用,且它们并不更新程序的状态
**声明式查询语言**中,用户只需描述所需信息,而不用给出获取该信息的具体步骤序列或函数调用,所需的信息通常使用某种形式的数学逻辑来表述
2.6 关系代数
关系代数由一组运算组成,这些运算接受一个或两个关系作为输入,并生成一个新的关系作为他们的结果
2.6.1 选择运算
选择运算选出满足给定谓词的元组,用小写希腊字母sigma(σ)来表示选择。谓词写在σ的下标中
我们允许谓词中使用等号、不等号、连接词如and、or、not组合
从给定关系中选择某几个行组成新的关系
2.6.2 投影运算
用符号π表示
从给定关系中选择某几个列组成新的关系
如有重复元组应删除掉
2.6.4 笛卡尔积运算
运算用X表示,允许我们结合来自任意两个关系的信息
2.6.5 连接运算(join)
1.Θ-连接
关系R和关系S的笛卡尔积中,满足AθB条件的所有元组(A∈R,B∈S且具有可比性)
2.等值连接操作
特殊的Θ-连接操作
选取关系R中某属性和关系S中某属性值相等的元组所构成
3.自然连接
一种特殊的等值连接
把属性的相同且值相同的元组连接在一起
4.外连接Outer-join
左外连接:自然连接+左侧表中失配的元组
右外连接:自然连接+右侧表中失配的元组
全外连接:自然连接+两侧表中失配的元组
2.6.6 集合运算
1.并相容性
1. 关系R和S的属性数目必须相同,一个关系的属性数量被称为**元数**
2. 对于任意i,关系R的第i个属性域必须和S的第i个属性域相同
2.并(Union)
用符号U表示
3.差(Difference)
R-S,由出现在R中的元素但不出现在S中的元素所构成
4.交(Intersection)
用符号∩表示
2.6.7 赋值运算
用⬅来表示
2.6.8 更名运算
**更名**运算用小写希腊字母rho(ρ)表示
除运算
除法运算常用于求解“查询...全部的/所有的...”问题
R÷S需要S的属性是R属性的真子集
关系演算
根据谓词不同可分为关系元组演算和关系域演算
基本形式为:{ t | P(t) }
其中P(t)可以是如下三种形式之一的原子公式:
t ∈ R
t 是关系 R 中的一个元组
s[A] θ c
元组分量s[A]与常量 c 之间满足比较关系
θ:比较运算符,<, <=,=, <>,>, >=
s[A] θ u[B]
s[A] 与 u[B] 为元组分量,A和B分别是某些关系的属性,他们之间满足比较关系θ.
运算符优先顺序
括弧、θ、∃、∀、┐、∧、∨
存在量词∃与全称量词∀
若元组变量t前面有存在量词或全称量词被称为**约束变量**,否则被称为**自由变量**
域演算
关系域演算公式的基本形式: { < x1 , x2 , … , xn > | P ( x1 , x2 , … , xn ) }其中, xi 代表域变量或常量, P为以xi为变量的公式。公式P可以递归地进行构造:
三种形式的原子公式是公式
< x1 , x2 , … , xn > ∈ R。 其中xi 代表域变量或常量, 表示由域变量构成的< x1 ,x2 , … , xn >是属于关系R的
x θ c。 其中,域变量x与常量c之间满足比较关系θ 。θ:比较运算符 <, <=, =, <>, >, >=
x θ y。其中,域变量x与域变量y之间满足比较关系θ
QBE语言
基本部分:
1. 关系名区:用于书写欲待查询的关系名
2. 属性名区:用于显示对应关系名区关系的所属性名
3. 操作命令区:用于书写查询操作的命令
4. 查询条件区:用于书写查询条件
操作命令
1. Print或P. 显示输出
2. Delete或D. 删除
3. Insert或I. 插入
4. Update或U. 更新
查询条件
1. 直接在查询条件区书写,形式为θ参量
2. θ可以是>,<>,<,>=,<=;如省略θ,默认为=
3. θ参量可以为常量,可直接书写
示例元素与投影
条件 θ 参量中的参量也可以是域变量,用任何一个值(不必是结果中的值)带有下划线表示,被称为示例元素. 示例元素下划线上面的值不起作用,被当作域变量名称来对待,只用于占位或是连接条件。不带下划线的则是构成实际条件一部分的值。
关系运算的安全性
安全性的概念
不产生无穷演算和无穷验证的运算被称为是安全的
关系代数和关系演算的安全性
关系代数是安全的
关系演算是不一定安全的
安全约束有限集合(DOM)
需要对关系演算施加约束条件,即任何公式都在一个集合范围内操作,而不是无限范围内操作,才能保证其安全性。
DOM(ρ)是一个有限集合,其中每个符号要么是ρ明显出现的符号,要么是出现在ρ中的某个关系R的某元组的分量。
DOM主要用于约束ρ中一些谓词的计算范围,它不必是最小集合。