第2章 关系数据库

2.1 关系数据结构

2.2 关系操作

2.3 完整性约束

2.4 关系代数

2.1 关系数据结构及形式化定义

2.1.1 关系——关系模型的数据结构——值

域(domain)一组具有相同数据类型的值的集合。

例如:自然数(N)、整数(Z)、实数(R)、{男,女}等一系列值的集合。

笛卡尔积

笛卡尔积(cartesian product):域上的一种集合运算。
给定一组域D1,D2,…,Dn,允许其中某些域是相同的,D1,D2,…,Dn的笛卡尔积为:
D   1   × D   2   × . . . × D   n   = { ( d   1   , d   2   , . . . , d   n   ) ∣ d   i   ∈ D   i   , i = 1 , 2 , . . . , n } D~1~\times D~2~ \times ...\times D~n~=\left \{(d~1~,d~2~,...,d~n~)|d~i~\in D~i~,i=1,2,...,n \right \} D 1 ×D 2 ×...×D n ={(d 1 ,d 2 ,...,d n )d i D i ,i=1,2,...,n}

  1. 每一个元素(d1,d2,…,dn)——n元组(元组)
  2. 元组的每一个值di——分量
  3. 一个域允许的不同取值个数——域的基数
  4. 若Di(i=1,2,…,n)为有限集,对应的基数mii=1,2,…,n),则 D   1   × D   2   × . . . × D   n   D~1~\times D~2~ \times ...\times D~n~ D 1 ×D 2 ×...×D n 的基数为:
    M = ∏ i = 1 n m   i   M=\prod_{i=1}^{n}m~i~ M=i=1nm i ——笛卡尔积的基数

关系——关系模型的数据结构——型

关系(relation) D   1   × D   2   × . . . × D   n   D~1~\times D~2~ \times ...\times D~n~ D 1 ×D 2 ×...×D n 的子集叫做域D1,D2,…,Dn关系

  1. 一般来说,D1,D2,…,Dn的笛卡尔积是没有实际语义的,但是它的某个真子集(某组关系)才有实际意义。
  2. 表示为R(D1,D2,…,Dn)。
  3. n=1,单元关系;n=2;二元关系。
  4. 关系是笛卡尔积的有限子集,关系也是一张二维表。
  5. 表的每一行对应一个元组,每一列对应一个域。

“码”的概念
候选码(candidate key)某一属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选码
主码(primary key):一个关系有多个候选码,其中任意一个。
主属性(prime attribute):候选码的诸属性。
非主属性/码属性(non-prime attribute/non-key attribute):不包含在任何候选码中的属性。
全码(all-key):候选码的属性个数 ≥ \ge 元组属性个数。
候选码属性个数=1 最简单情况
候选码属性个数=n=元组属性个数 此时候选码–>全码

关系的三种类型

关系类型解释
基本关系(基本表或基表)实际存在的表,实际存储数据的逻辑表示
查询表查询结果对应的表
视图表基本表或其他视图表导出的表,是虚表,不对应实际存储的数据

基本关系的6条性质

  1. 列是同质的。

意味着每一列的数据来源于同一个域。

  1. 不同的列可出自同一个域.

为了区别属性,不同的属性(来自同一个域)要给予不同的属性名。

  1. 列的顺序无所谓,即列的次序可以任意交换。
  2. 任意两个元组的候选码不能取相同的组。

候选码的功能:唯一地标识一个元组。

  1. 行的顺序无所谓,即行的次序可以任意交换。
  2. 每一个分量必须是不可分割的数据项。

2.1.2 关系模式

关系模式——型——对一个关系的描述——数据的描述
关系——值——元组的集合——数据本身
关系模式(relation schema):R(U,D,DOM,F)。

  1. 关系名——R
  2. 属性名集合——U
  3. 属性来自的域——D
  4. 属性向域的映像关系——DOM
  5. 属性间数据的依赖关系的集合——F
    关系模式一般简记为R(U)=R(A1,A2,…,,An

关系模式和关系的联系

对象本身性质状态二者联系
关系笛卡尔积的子集-元组的集合动态的,随时间不断变化的关系是关系模式在某一时刻的状态和内容
关系模式对关系数据的提炼和描述静态的,稳定的在关系模式下的关系被有机地组织在一起

2.1.3 关系数据库

关系数据库的型——关系数据库模式(对关系数据库的描述)
关系数据库的值——关系数据库(关系模式在某一时刻的关系的集合)

2.1.4 关系模型的存储结构

2.2 关系操作

关系模式给出了关系操作的能力的说明,没有对关系数据库管理系统语言给出具体的语法要求。而关系操作是不同关系数据库管理系统应该定义和开发来实现的。

2.2.1 基本的关系操作

查询(query):关系操作中最主要的部分。

查询包括:选择(select)投影(project)、连接(join)、除(divide)、并(union)差(except)、交(intersection)、笛卡尔积。红色为基本的5中操作,其他的可以有这五种操作导出。

插入(insert)
删除(delete)
修改(update)

2.2.2 关系数据语言的分类

关系数据语言
关系代数语言ISBL
关系验算语言
元组关系演算语言ALPHA和QUEL
域关系演算语言QBE
具有关系代数和关系演算双重特点的语言SQL

2.3 关系的完整性

关系模型的完整性规则:对关系的某种约束太偶见。

关系的值随着时间变化时应该满足一些约束条件,是对现实世界的要求

关系数据库完整性
实体完整性
参照完整性
用户自定义完整性
关系的不变性
特定领域的语义约束

2.3.1 实体完整性

实体完整性规则:若属性A 是基本关系R 的主属性,则属性A不能取空值。

R(Ai)(i=1,2,…,n)!= ⊘ \oslash

(1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
(2) 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3) 关系模型中以主码作为唯一性标识。
(4) 主码中的属性即主属性不能取空值。

2.3.2 参照完整性

关系间的引用

实体及实体的联系
关系
关系及关系的引用

三个例子:

例1:学生实体、专业实体:
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)

学生关系引用了专业关系的主码“专业号”。

例2:学生、课程、学生与课程之间的多对多联系
学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号课程号,成绩)

选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。

例3:学生实体及其内部的一对多联系
学生(学号,姓名,性别,专业号,年龄,班长

学生关系引用了自身的主码“学号”作为“班长”属性

外码

外码(foreign key):设F是基本关系R 的一个或一组属性,但不是关系R 的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R 的外码

  1. R——参照关系(Referencing Relation)
  2. S——被参照关系(Referenced Relation)或目标关系(Target Relation)
  3. R和S可能相同(例3),也可能不同(例4)。
  4. 目标关系S的主码Ks 和参照关系R的外码F必须定义在同一个(或一组)域上。
  5. 外码并不一定要与相应的主码同名。

参照完整性规则

参照完整性规则:若属性(或属性组)F是基本关系R 的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:

  1. 取空值(F 的每个属性值均为空值)
  2. 等于S 中某个元组的主码值

R(F)==S(Ks),F取值限定为空或S(Ksi

2.3.3 用户定义的完整性

用户定义的完整性:用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。

2.4 关系代数

关系代数:抽象的查询,用对关系的运算表示查询。

关系试做元组的集合,行角度
行,列角度
运算
运算对象
运算结果
运算符
关系
传统的集合运算符
专门的关系运算符

2.4.1 传统的集合运算

含义传统集合运算符
∪ \cup
− -
∩ \cap
笛卡尔积 × \times ×

并(union): R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\left \{ t\mid t\in R\vee t\in S\right \} RS={ttRtS}

并

差(except): R − S = { t ∣ t ∈ R ∧ t ∉ S } R-S =\left \{ t\mid t\in R\wedge t\notin S\right \} RS={ttRt/S}
差

交(intersection): R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S=\left \{ t\mid t\in R\wedge t\in S\right \} RS={ttRtS}
交

笛卡尔积

笛卡尔积(cartesian product): R × S = { t   r   ⌢ t   s   ∣ t   r   ∈ R ∧ t   s   ∈ S } R\times S=\left \{ t~r~\stackrel\frown{} t~s~\mid t~r~\in R\wedge t~s~\in S\right \} R×S={t r t s t r Rt s S}
笛卡尔积

2.4.2 专门的关系运算

运算符介绍

  1. t[Ai]

设关系模式为R(A1,A2,…,An)。设某一个关系为R, t ∈ R t\in R tR表示t是R的一个元组。
t[Ai] 则表示元组t 中相应于属性Ai 的一个分量

  1. A={Ai1,Ai2,…,Aik}和t[A] =(t[Ai 1],t[Ai 2],…,t[Ai k]) 和 A ˉ \bar{A} Aˉ

A={Ai1,Ai2,…,Aik},Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则A={Ai1,Ai2,…,Aik}称为属性列或域列
t[A] =(t[Ai 1],t[Ai 2],…,t[Ai k]) 表示元组t在属性列A上诸分量合
A ˉ \bar{A} Aˉ则表示元组t在属性A{ A1,A2,…,An}中去掉 {Ai1,Ai2,…,Aik}后剩余的属性组

  1. t r ⌢ t s t_{r} \stackrel\frown{} t_{s} trts

R 为n目关系,S为m目关系。
t   r   ∈ R t~r~\in R t r R t   s   ∈ S t ~s~\in S t s S t r ⌢ t s t_{r} \stackrel\frown{} t_{s} trts称为元组的连接。
它是一个n+m列的元组前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。

  1. 象集Zx

给定一个关系R(X,Z),X 和Z 为属性组。
当t [X ]=x 时,x 在R 中的象集(Images Set)为: Z X   = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z _{X} ~=\left \{ t\left [ Z \right ] \mid t\in R ,t\left [ X \right ]= x \right \} ZX ={t[Z]tR,t[X]=x}
它表示R中属性组X上值为x 的诸元组在Z上分量的集合。
象集

选择

选择(select): σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } \sigma _{F} \left ( R \right ) =\left \{ t\mid t\in R\wedge F\left ( t \right )='真' \right \} σF(R)={ttRF(t)=}

F——选择条件—— X   1   Θ X   2   X~1~\Theta X~2~ X 1 ΘX 2 
Θ \Theta Θ={ > > > ≥ \ge < < < ≤ \le = = = < > <> <> ¬ \neg ¬ ∧ \wedge ∨ \vee }

选择是基于进行操作的,选出的也是的部分。

投影

投影(projection): ∏ A ( R ) = { t [ A ] ∣ t ∈ R } {\textstyle \prod_{A}^{}} (R)=\left \{ t[A]|t\in R \right \} A(R)={t[A]tR}

A——属性列
投影可能会取消重复的元组。

选择是基于进行操作的,选出的也是的部分。

连接

连接(join): R ⋈ S = { t r t s ⌢ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R\Join S=\left \{ \stackrel\frown{t_{r} t_{s} } |t_{r}\in R\wedge t_{s}\in S\wedge t_{r}\left [ A\right ] \theta t_{s}\left [ B\right ]\right \} RS={trtstrRtsStr[A]θts[B]}

A,B——R,S列数相等的且可比的属性组
θ \theta θ——比较运算符
连接是从R × \times ×S中选出满足R.A θ \theta θR.B元组

连接是基于行列进行操作的,选出的是一组二维表

  1. 等值连接
  2. 自然连接(一种特殊的等值连接)

悬浮元组:参与连接操作时被舍弃的元组。
左外连接:保存左边关系R的悬浮元组,其他属性填上NULL值
右外连接:保留右边关系S的悬浮元组,其他属性填上NULL值。

除运算

象集(images set):给定一个关系R(X,Z),X 和Z 为属性组。当t [X ]=x 时,x 在R 中的象集为: Z x = { t Z , t ∈ R , t [ X ] = x } Z_{x} =\left \{ t_{Z} ,t\in R ,t[X]=x\right \} Zx={tZ,tR,t[X]=x}
除(division): R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ ∏ Y ( S ) ⊆ Y x } R{\div}S=\left \{ t_{r} \left [ X \right ] | t_{r}\in R\wedge {\textstyle \prod_{Y}^{}} \left ( S \right ) \subseteq Y_{x} \right \} R÷S={tr[X]trRY(S)Yx}

给定关系R(X,Y)和S(Y,Z),R(Y)和S(Y)属性名可以不同,但出自同一个域集。
R与S的除运算得到新的关系P(x)
大的部分:Y在R象集;小的部分:S在Y的投影。

总结

并、差、笛卡尔积、选择、投影——基本运算。
交、连接、除——基于基本运算得出。
关系代数表达式:有限次运算复合后形成的表达式。

2.5 关系演算

2.5.1 元组关系语言ALPHA

检索操作

更改操作

2.5.2 元组关系演算

2.5.3 域关系演算语言

检索操作

更新操作

2.6 小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绕球飞行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值