关系数据库——关系模型
文章目录
一、关系的定义
-
域:(x轴、y轴)域是一组具有相同数据类型的值的集合,例如整数,实数,指定长度的字符串集合,{‘男’,‘女’}…
-
笛卡尔积:(坐标平面)给定一组域 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn,允许其中某些域是相同的,那么他们的乘积(所有域的所有取值的组合)就是笛卡尔积。
比如 D 1 , D 2 , D 3 D_1,D_2,D_3 D1,D2,D3三个域内分别有2,3,4个元素,那么笛卡尔积 D 1 x D 2 x D 3 D_1 x D_2xD_3 D1xD2xD3的元素就有2x3x4=24个,这时,称笛卡尔积里的每一个元素为“元组”,通常用t表示,元组的数量为“基数”。 -
关系: D 1 × D 2 × . . . × D n D_1 \times D_2\times ...\times D_n D1×D2×...×Dn的子集叫做在域 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn上的关系,表示为: R ( D 1 , D 2 , . . . , D n ) R(D_1,D_2,...,D_n) R(D1,D2,...,Dn),其中,称R为关系名,n为关系的目或者度。如果n=1,称该关系为单元关系或一元关系。如果n=2,称该关系为二元关系。
-
属性:n个目也就是n个列的名字称为“属性”。(但是不是n个域就是n个属性)
- 关系的表示是一个二维表,每行对应一个元组,每列对应一个域,列名就是一个“属性”,表名就是一个模式。
-
候选码(标识唯一性的号码):若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。
-
基本关系的性质:
- 列是同质的
- 不同的列可以出自同一个域(其中的每一列称为一个属性,不同的属性要给与不同的属性名)
- 列的顺序无所谓,行的顺序也是无所谓的
- 任意两个元组的候选码不能相同
- 分量必须取原子值(不能存在表中表,若这是一个表中表,就不是一个关系,要把表中表改成合格的二维表)
二、基本的关系操作
常用的关系操作:
- 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积(选择、投影、并、差、笛卡尔积是五种基本操作)
- 数据更新:插入、删除、修改
关系操作的特点:关系就是元组的集合,所以关系操作的对象和结果都是集合。
三、关系数据库语言的分类
关系代数语言:用对关系的运算来表达查询要求,如ISBL
关系演算语言:用谓词来表达查询要求,包括元组关系演算语言和域关系演算语言,如APLHA,QBE
具有关系代数和关系演算双重特点的语言:如SQL
四、关系模型中的完整性
- 实体完整性
- 关系的主码(所有候选码里任意取一种即可,能作为标识的属性)中的属性值不能为空值(不知道或无意义的值,不是“零值”,控制用“?”表示,有空值的时候需要特殊处理)
- 意义:关系中的元组是可区分的各题,这些个体是通过主码来唯一标识的,主码为空,则出现不可标识的个体,这是不容许的。
-
参照完整性
参照完整性就是指:如果F是关系R1的外码,参照的是关系R2的主码,那么F的值必须是R2的主码其中的值(也可以为空值,但是若其填入信息,也必须是R2主码其中的值)外码/外键:关系R中的一个属性组,他不是R的候选码,但他与另一个关系S的候选码相对应,则称这个属性组为R的外码/外键。两个关系通常就是靠外码连接起来的。两个表也可以合二为一,这时外码连接的就是两个属性,如下。
设F是基本关系R的外码,其与基本关系S的主码Ks相对应,则称基本关系R为 “参照关系” ,基本关系S称为 “被参照关系” 或 “目标关系”。 -
用户自定义完整性
即用户针对具体的应用环境定义的完整性约束。比如年龄只能在[12,35]之间,性别只能是男、女。
- DBMS对关系完整性的支持
首先,实体完整性和参照完整性都是有DBMS系统自动支持。其次,DBMS会支持用户自定义完整性,同时会通过以上完整性对用户的录入等操作进行约束(相当于完整性就是一种数据库系统里的约束规则)
五、关系代数概述
-
集合操作:并、交、差、笛卡尔积
纯关系操作:投影、选择、连接、除 -
并差交操作的前提条件:需要两个关系满足并相容性
即参与运算的两个关系及相关熟悉之间有一定的对应性、可比性、意义关联性。要求:①两个关系的属性数目相同,②对应的属性的域必须相同。
五个基本操作
1. 并(Union)
将两个关系的元组合并成一个关系,在合并时去掉重复的元组。
数学描述: R ⋃ S = S ⋃ R = { t ∣ t ∈ R ⋁ t ∈ S } R\bigcup S=S\bigcup R=\{t | t \in R \bigvee t \in S\} R⋃S=S⋃R={t∣t∈R⋁t∈S}
文字描述:R(选了音乐课的同学),S(选了美术课的学生), R ⋃ S R\bigcup S R⋃S(选了音乐课或者美术课的学生)
2. 差(Difference)
用两个关系的元组形成一个关系,剔除掉关系中的属于另一个关系的元组。
数学描述: R − S = { t ∣ t ∈ R ⋁ t ∉ S } R - S=\{t | t \in R \bigvee t \notin S\} R−S={t∣t∈R⋁t∈/S}
文字描述:R(选了音乐课的同学),S(选了美术课的学生), R ⋃ S R\bigcup S R⋃S(选了音乐课但是没有选美术课的学生)
3. 笛卡尔积
将两个关系的元组排列组合成一个关系,在合并时有序地组合所有元组。
如下例,可以看到,若R的度为m,基数为x,S的度为n,计数为y,则做运算之后的新关系
K
=
R
×
S
=
S
×
R
K=R \times S=S \times R
K=R×S=S×R的度为m+n,基数为x*y。
4. 选择(Select)
用给定的一个条件(condition)在关系中挑选出满足条件的元组构成新的关系。
数学描述: σ c o n ( R ) = { t ∣ t ∈ R ⋁ c o n ( t ) = ′ 真 ′ } \sigma_{con}(R)=\{t | t \in R \bigvee con(t)='真'\} σcon(R)={t∣t∈R⋁con(t)=′真′}
文字描述:R(选了音乐课的同学),con(是女生), σ c o n ( R ) \sigma_{con}(R) σcon(R)(选了音乐课的女生)
关于关系表示
- 条件con通常有逻辑运算符连接比较表达式组成,比如“name=“小明” and age < 18”
- 符号的顺序是有优先级的,最好要加括号进行表示
5. 投影(Project)
用给定的一个条件(condition)在关系中挑选出某些列(某些属性)构成新的关系。
数学描述: ∏ A j 1 , A j 2 , . . . , A j k = { < t [ A j 1 ] , t [ A j 2 ] , . . . , t [ A j k ] > ∣ t ∈ R } \prod_{A_j1,A_j2,...,A_jk}=\{<t[A_j1],t[A_j2],...,t[A_jk]> | t \in R\} Aj1,Aj2,...,Ajk∏={<t[Aj1],t[Aj2],...,t[Ajk]>∣t∈R}
文字描述:R(选了音乐课的同学), A 1 A_1 A1(姓名), A 2 A_2 A2(年龄), ∏ A 1 , A 2 \prod_{A_1,A_2} ∏A1,A2(选了音乐课的同学的姓名和年龄)
扩展操作
1. 交(Intersection)
挑选出在两个关系中同时出现的元组,构成一个新的关系。
数学描述:
R
⋂
S
=
S
⋂
R
=
{
t
∣
t
∈
R
⋀
t
∈
S
}
R\bigcap S=S\bigcap R=\{t | t \in R \bigwedge t \in S\}
R⋂S=S⋂R={t∣t∈R⋀t∈S}
文字描述:R(选了音乐课的同学),S(选了美术课的学生),
R
⋃
S
R\bigcup S
R⋃S(既选了音乐课也选了美术课的学生)
与基本运算的关系:
R
⋂
S
=
S
⋂
R
=
R
−
(
R
−
S
)
=
S
−
(
S
−
R
)
R\bigcap S=S\bigcap R=R - (R - S) =S - (S - R)
R⋂S=S⋂R=R−(R−S)=S−(S−R)
2. θ − \theta- θ−连接( θ − \theta- θ−Join)
挑选出多个关系中所有满足条件的元组,构成一个新的关系。即先用笛卡尔积操作,把多个关系组合到一起,然后再用条件进行选择操作。
数学描述及与基本运算的关系:在R和S的笛卡尔积中,选取R中属性A与S中属性B同时满足
θ
\theta
θ条件的元组(
θ
\theta
θ是比较运算符)
示例:
3. 等值连接(Equal-Join)
这是 θ − \theta- θ−连接的特殊情况,即当 θ − \theta- θ−为“=”符号时。
数学描述及与基本运算的关系:
示例:
4. 自然连接(Natural-Join)
这是等值连接的特殊情况,即当两个关系中的属性相同时。
- 连接的智能性:可以看到,笛卡尔积对于相同的属性并不会进行合并,但是连接中很自然地进行了合并。
数学描述及与基本运算的关系:可以看到这里符号里是没有条件的,这就是“自然连接”的内涵,即会自动检测相同的属性进行连接
示例:
5.除法
象集:
给定一个关系R(X,Y),X和Y为属性组,X的某个值为x,记为
[
X
]
=
x
[X]=x
[X]=x,这些X的值为x的元组对应的Y的值的集合就称为“x在R中的象集”,记为
Y
x
Y_x
Yx
给定两个关系R(X,Y)和S(Y,Z),则除法的定义为:
首先观察到两个关系同时有Y这个属性组,因此以Y为标准,先取S里属性Y的投影,得到一个集合,R÷S,就是寻找R里面有几个象集包含这个投影的X的值。
例:
求:既选了数据库又选了信息论课程的同学的学号——
先创建集合如下(只截取了Y这个属性组的投影)
然后用R÷S——
1的象集为{数据库,信息论}
2的象集为{操作系统,数据库,信息论}
3的象集为{信息论}
因此,只有1和2的象集是包含S中Y的集合的,因此R÷S={1,2},即得到既选了数据库又选了信息论课程的同学的学号是1和2
或者用一种定义的方式进行定义:
上面的列表可以看做:(即X的元素与Y元素的笛卡尔积的并集)
再定义:(即一个笛卡尔积除以S,若S在Y中,返回X的值x,否则返回空,这就是判断S是不是在x元素的象集中)
因此: