文章目录
第三节.关系的完整性
- 所谓完整性是关系 需要 满足的某种约束条件,关系的值需要满足约束条件
- 三类完整性:实体完整性、参照完整性、用户定义完整性
- 前两个是关系模型必须满足的,称为关系的两个不变性
- 最后一个是具体领域的具体约束
(一)实体完整性
- 实体完整性是针对基本关系而言的,一个基本表通常对应现实世界的一个实体集,每个实体之间应该有某种唯一标识
- 关系模型中以主码作为唯一性标识
- 简单来说就是,候选码中的属性即主属性不能取空值
(二)参照完整性
关系间的引用
-
实体与实体间的联系都是用关系来描述的,自然存在着关系与关系间的引用
-
两个关系间的引用
-
学生的专业号必须是学校有的专业号,两个专业号之间是引用关系,学生关系的专业号引用专业的专业号
-
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
-
-
两个以上关系的引用
- 学生(学号,姓名,性别,专业号,年龄)
- 课程(课程号,课程名,学分)
- 选课(学号,课程号,成绩)
-
同一关系内部属性间的引用
-
学生(学号,姓名,性别,专业号,年龄,班长)
-
班长引用的学生关系中的学号
-
外码
- 设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码
- R和S可以是相同的关系,也可以是不同的关系
- S的主码Ks和F必须定义在同一个域上
- 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别
- 说白了就是F不是R的码但是S的码,F是R的外码,外码的作用是表示关系之间的联系
参照完整性(外码取值要求)
-
若属性(或属性组)F 是关系R 的外码,它与关系S 的主码Ks 相对应(关系R 和S 不一定是不同的关系),则对于R 中每个元组在F 上的值必须为:
- 或者取空值(F 的每个属性值均为空值)
- 或者等于S中某个元组的主码值
-
理解1:
- 学生(学号,姓名,性别,专业号,年龄)
- 专业(专业号,专业名)
学生没选专业之前他的专业号就是空值,当专业确定之后专业号取值必须在专业关系中选择
-
理解2:
- 学生(学号,姓名,性别,专业号,年龄)
- 课程(课程号,课程名,学分)
- 选课(学号,课程号,成绩)
选修关系的主属性不能取空值,只能取相应被参照关系中已经存在的主码值
-
理解3:
- 学生(学号,姓名,性别,专业号,年龄,班长)
- 空值表示还没有选班长
- 非空值表示班长学号必须是本关系的学号之一
(三)用户定义的完整性
- 例子:课程(课程号,课程名,学分)
- “课程号”属性必须取唯一值(实体完整性)
- 非主属性“课程名”也不能取空值(用户定义完整性,这是人为希望的,规定不能是null)
- “学分”属性只能取值{1,2,3,4}(用户定义完整性,这是认为希望的,规定值域的范围)
第四节.关系代数
- 关系代数是一种抽象的查询语言,它用关系运算来表达查询
- 运算对象是关系,结果是关系,两大类:传统的集合运算符和专门的关系运算符
- 传统的仅涉及到行,专门的涉及到行和列
(一)传统集合运算
并
-
前提
- 目(属性个数)要相同
- 相应的属性要取自同一个域
-
运算
-
结果属性个数不变,有属于R或属于S的元组组成,可以换顺序
-
一定注意:结果是一行一行的看,看哪一行不同则加到一起
-
元组元组元组
-
差
- 前提
- 目(属性个数)要相同
- 相应的属性要取自同一个域
- 运算:
- 属于R 而不属于S 的所有元组组成 ,不能换顺序
- 把R中元组依次和S每一个比较,如果S没有则就是结果之一
交
- 前提
- 目(属性个数)要相同
- 相应的属性要取自同一个域
- 运算:
- 既属于R又属于S的元组组成 ,可以换顺序
笛卡尔积
-
前提
- 严格地讲应该是广义的笛卡尔积,笛卡尔积的元素是元组
- R: n目关系,k1个元组
- S: m目关系,k2个元组
-
运算
-
实质上的拼接,前边的每一个元组与后面的元组依次拼接,不能调换顺序
-
列
-
一共是m+n列
-
元组的前n列是关系R的一个元组
-
后m列是关系S的一个元组
-
-
行
- k1×k2个元组
-
(二)专门的关系运算
基础符号
- R,t属于R,t[Ai]
- 设关系模式为 R(A1,A2,…,An),它的一个关系设为R
- t属于R 表示t是一个元组
- t[Ai] 表示元组t中属性Ai的一个分量
- A,t[A], A取反
- A:所有属性的一部分,称为属性列或属性组
- t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元组 t 在属性列A上k个分量的集合
- A非,表示把所有属性列中A的部分去掉。
- tr连接ts(类似于广义的笛卡尔积)
- R为n目关系,S为m目关系
- tr 属于R,ts属于S, tr连接ts称为元组的连接
- tr连接ts是一个n + m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组
- 象集——
- 给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集定义为Zx={ t[Z]|t∈R,t[X]=“x” }
- 它表示R中属性组X上值为x的所有元组在Z上分量的集合
- 即固定一个,选出与固定的这个有关的分量
选择
-
选择又称为限制
-
在关系R中选择满足给定条件的元组
σ F ( R ) = t ∣ t 属 于 R ∧ F ( t ) = T r u e σF(R) = {t|t属于R∧F(t)= True} σF(R)=t∣t属于R∧F(t)=True-
F:选择条件,是一个逻辑表达式,基本形式为: X1θY1
-
θ表示比较运算符,它可以是>,≥,<,≤,=或<>
-
选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算
-
选择就是根据要求的条件选择行来查询
-
投影
-
从R中选择出若干属性列组成新的关系
π A ( R ) = t [ A ] ∣ t I ^ R πA(R) = { t[A] | t ÎR } πA(R)=t[A]∣tI^R
A:R中的属性列 -
投影操作主要是从列的角度进行运算
-
但是有一种特殊的情况,如果只选择一个列,可能会有很多重复的分量,DBMS会自动去重,所以把重复元组就去掉了
连接
- 连接也称为θ连接
- 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
- 分类:
- 等值连接:θ为=的连接运算,从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组
- 自然连接:是一种特殊的等值连接,把重复的属性列去掉,从行和列的角度运算
- 一般连接:从行的角度,根据θ取值来进行连接
- 悬浮元祖
- 两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组
- 外连接:
- 如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接
- 左外连接:如果只把左边关系R中要舍弃的元组保留就叫做左外连接
- 右外连接:如果只把右边关系S中要舍弃的元组保留就叫做右外连接
- 外连接 = 左外连接+右外连接,外连接的方法就是做一个百搭元组,把所有的分量都置成null
除
- 给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合
- 步骤:
- 1.划分X、Y、Z,只有R有的是X,只要S有的是Z,公共的是Y
- 求关系R中X属性各个分量在Y上的象集
- 关系S对Y做投影
- 包含S对Y上投影的象集对应的属性分量
- 简而言之,最关键的三个步骤就是,划分后的求象集、找S对Y的投影,比较包含
- 出现至少、全部等字眼用除
未完待续