关系模型
1.关系结构
1.1关系的定义
笼统来说关系就是一个表,如何严格定义一个关系呢?
域:一组值的集合,这组值具有相同的数据类型。
如整数集合,字符串集合,8位数字组成的数字串集合,学生集合…
笛卡尔积:一组域 D 1 , D 2 , ⋯ , D n D_1, D_2, \cdots,D_n D1,D2,⋯,Dn的笛卡尔积为: D 1 × D 2 × ⋯ × D n = { ( d 1 , d 2 , ⋯ , d n ) ∣ d i ∈ D i } D_1 \times D_2\times \cdots\times D_n=\{(d_1, d_2, \cdots,d_n)|d_i \in D_i \} D1×D2×⋯×Dn={(d1,d2,⋯,dn)∣di∈Di}
笛卡尔积的每个元素 ( d 1 , d 2 , . . . , d n ) (d_1,d_2,...,d_n) (d1,d2,...,dn)称为一个n元组
∣ D 1 × D 2 × ⋯ × D n ∣ = ∣ D 1 ∣ × ∣ D 2 ∣ × ⋯ × ∣ D n ∣ |D_1\times D_2\times \cdots\times D_n|=|D_1|\times |D_2|\times \cdots\times |D_n| ∣D1×D2×⋯×Dn∣=∣D1∣×∣D2∣×⋯×∣Dn∣
关系:一组域 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn的笛卡尔积的子集
笛卡尔积中具有某一方面意义的那些元祖被称为一个关系
关系的不同列可能来自同一个域,为了区分,要为每一个列取一个名字,该名字称为属性名
关系可以用 R ( A 1 : D 1 , A 2 : D 2 , . . . , A n : D n ) R(A_1:D_1,A_2:D_2,...,A_n:D_n) R(A1:D1,A2:D2,...,An:Dn)来描述,简记为 R ( A 1 , A 2 , . . . , A n ) R(A_1,A_2,...,A_n) R(A1,A2,...,An)这种描述称为关系模式(schema)。 R R R是关系名, A i A_i Ai是属性名, D i D_i Di是属性对应的域
关系模式与关系:同一关系模式下,可有很多的关系
关系模式是关系的结构,关系是关系模式在某一时刻的数据
关系模式是稳定的,而关系是某一时刻的值是随时间变化的
关系的特性:属性不可再分(第一范式)
列是同质的(数据类型相同)
候选码:关系中的一个属性组,其值能唯一标识一个元组,并且从该属性组中去掉任何一个属性就不再具有此性质。包含在候选码中的任何一个属性成为主属性,其他属性称为非主属性。
主码:当有多个候选码时,可以选定一个作为主码。
外码:关系R中的一个属性组,他不是R中的候选码,但它与另一个关系S的主码相对应,则这个属性组称为外码。
1.2表
关系是数学概念上严格定义的概念,表是实际的数据库管理系统对关系概念的具体实现。理论上,关系的任意两个元祖不能完全相同(集合的要求);显示应用中,表可能并不完全遵守此特性。
关系与表对应的概念
关系:关系模式;属性与属性值;元组
表 :表、标题;列名与列值 ;行/记录
2.关系运算
关系代数运算的特点:关系代数的运算是基于集合的,提供了一系列的关系代数操作,包括,并、差、笛卡尔积(广义积)、选择、投影、更名等基本操作;另外还有交、连接、关系除等扩展操作。
并相容性
定义:关系R和关系S存在相容性,当且仅当:关系R和关系S的属性数目必须相同,并且对于任意i,关系R的第i个属性的域和关系S的第i个属性的域相同。
并操作
定义:假设关系R和关系S是并相容的,关系R与关系S的并运算的结果也是一个关系,记作: R ∪ S R \cup S R∪S,它由或者出现在R中,或者出现在S中的元组构成的。数学描述: R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R \cup S = \{t|t \in R \vee t\in S \} R∪S={t∣t∈R∨t∈S},其中t是元组。
注意:如果两个关系存在值相同的元组,并操只会保留一个相同值的元组
差操作:假设关系R和关系S是并相容的,关系R与关系S的差运算的结果也是一个关系,记作: R − S R-S R−S,它是由出现在R中,但是不出现在S中的元组构成的。数学描述: R − S = { t ∣ t ∈ R ∧ t ∉ S } R-S=\{t|t \in R \wedge t \notin S\} R−S={t∣t∈R∧t∈/S},其中t是元组。
注意:R-S与S-R是不同的
笛卡尔积:关系 R < a 1 , a 2 , . . . , a n > R<a_1,a_2,...,a_n> R<a1,a2,...,an>与关系 S < b 1 , b 2 , . . . , b m > S<b_1,b_2,...,b_m> S<b1,b2,...,bm>的广义笛卡尔积运算结果也是一个关系,记作: R × S R \times S R×S,它由关系R中的元组与关系S中的元组进行所有可能的拼接构成。
数学描述: R × S = { < a 1 , a 2 , . . . , a n , b 1 , b 2 , . . . , b m > ∣ < a 1 , a 2 , . . . , a n > ∈ R ∧ < b 1 , b 2 , . . . , b m > ∈ S } R \times S = \{<a_1,a_2,...,a_n,b_1,b_2,...,b_m>|<a_1,a_2,...,a_n> \in R \wedge <b_1,b_2,...,b_m> \in S \} R×S={<a1,a2,...,an,b1,b2,...,bm>∣<a1,a2,...,an>∈R∧<b1,b2,...,bm>∈S}
注意: R × S = S × R R \times S = S \times R R×S=S×R,若R中有n个属性,S中有m个属性,则 R × S R \times S R×S有n+m个属性,若R有x个元组,S有y个元组,则 R × S R\times S R×S有x*y个元组
选择:给定一个关系R,同时给定一个选择条件condition(简记为:con),选择运算结果也是一个关系。记作: σ c o n ( R ) \sigma_{con}(R) σcon(R),它从关系R中选择满足给定条件的元组构成。数学描述: σ c o n ( R ) = { t ∣ t ∈ R ∧ c o n ( t ) = t r u e } \sigma_{con}(R)=\{t|t\in R \wedge con(t) = true\} σcon(R)={t∣t∈R∧con(t)=true}
投影:给定一个关系R,投影运算结果也是一个关系,记作 ∏ A ( R ) \prod_A(R) ∏A(R),它从R中选出属性包含在A中的列构成。
数学描述: ∏ A i 1 , A i 2 , . . . , A i k ( R ) = { < t [ A i 1 ] , t [ A i 2 ] , . . . , t [ A i k ] > ∣ t ∈ R } \prod_{A_{i1},A_{i2},...,A_{ik}(R)}=\{<t[A_{i1}],t[A_{i2}],...,t[A_{ik}]>|t\in R\} ∏Ai1,Ai2,...,Aik(R)={<t[Ai1],t[Ai2],...,t[Aik]>∣t∈R},其中 t [ A i ] t[A_{i}] t[Ai]表示元组t中相应于属性Ai的分量,投影后,列按照列选择顺序重新排列
交(intersection):假设关系R和关系S是并相容的,关系R与关系S的交运算的结果也是一个关系,记作: R ∩ S R\cap S R∩S,它由同时出现在关系R和关系S中的元组组成。
数学描述: R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R \cap S=\{t|t\in R \wedge t\in S\} R∩S={t∣t∈R∧t∈S},其中t是元组
交也可以通过差运算实现: R ∩ S = R − ( R − S ) = S − ( S − R ) R\cap S=R-(R-S)=S-(S-R) R∩S=R−(R−S)=S−(S−R)
θ \theta θ连接:给定关系R和关系S,R和S的 θ \theta θ连接结果也是一个关系,记作: R ⋈ A θ B S R \Join_{A \theta B} S R⋈AθBS
它由R和S的笛卡尔积中,选取R中属性A与S中属性B之间满足 θ \theta θ条件的元组构成
数学描述:
R
⋈
A
θ
B
S
=
σ
t
[
A
]
=
t
[
B
]
(
R
×
S
)
R \Join_{A \theta B} S=\sigma_{t[A]=t[B]}(R \times S)
R⋈AθBS=σt[A]=t[B](R×S),其中
θ
\theta
θ是比较运算符,
θ
∈
{
>
,
≥
,
<
,
≤
,
=
,
≠
}
\theta \in \{>, \geq,<,\leq,=,\neq\}
θ∈{>,≥,<,≤,=,=},当
θ
\theta
θ中的符号为"="
号时,就是等值连接,等值连接是
θ
\theta
θ连接的一个特例
自然连接,自然连接是一种特殊的等值连接,所以
θ
\theta
θ是“=”
号,并且,属性A和属性B是相同的属性(属性名相同),所以自然连接就是关系R和关系S的笛卡尔积中选取相同属性组上值相等的元组构成
注意自然连接会去掉重复的属性列
关系代数扩展操作
除(division):除法运算使用的场景大多数为,“查询...全部的/所有的...”
,问题。
除法运算的前提:给定关系 R ( A 1 , A 2 , . . . , A n ) R(A_1,A_2,...,A_n) R(A1,A2,...,An)为n度关系,关系 S ( B 1 , B 2 , . . . , B m ) S(B_1,B_2,...,B_m) S(B1,B2,...,Bm)为m度关系。如果可以进行关系R与关系S的除运算,当且仅当:属性集 S ( B 1 , B 2 , . . . , B m ) S(B_1,B_2,...,B_m) S(B1,B2,...,Bm)为关系 R ( A 1 , A 2 , . . . , A n ) R(A_1,A_2,...,A_n) R(A1,A2,...,An)的真子集,即m<n
定义:关系R与关系S的除运算也是一个关系,记作: R ÷ S R \div S R÷S,分两部分定义。
- R ÷ S R \div S R÷S的属性集为 { C 1 , C 2 , . . . , C k } = { A 1 , A 2 , . . . , A n } − { B 1 , B 2 , . . . , B m } \{C_1,C_2,...,C_k\}=\{A_1,A_2,...,A_n\}-\{B_1,B_2,...,B_m\} {C1,C2,...,Ck}={A1,A2,...,An}−{B1,B2,...,Bm}
- 假设 R ÷ S R \div S R÷S的结果为元组 < c 1 , . . , c k > <c_1,..,c_k> <c1,..,ck>的集合,元组 < c 1 , . . , c k > <c_1,..,c_k> <c1,..,ck>满足以下条件,它与S中的每一个元组 < b 1 , . . . , b m > <b_1,...,b_m> <b1,...,bm>组合形成的一个新元组都是R中的某一个元组 < a 1 , . . . , a n > <a_1,...,a_n> <a1,...,an>,其中 a n , b m , c k a_n,b_m,c_k an,bm,ck分别是属性 A n , B m , C k A_n,B_m,C_k An,Bm,Ck的值。数学描述: R ÷ S = { t ∣ t ∈ ∏ R − S ( R ) ∧ ∀ u ∈ S ( t u ∈ R ) } R \div S = \{t|t\in \prod_{R-S}(R)\wedge \forall u\in S(tu\in R)\} R÷S={t∣t∈∏R−S(R)∧∀u∈S(tu∈R)},其中 t u tu tu是元组的组合
外连接:定义:两个关系R与S进行连接时,如果关系R(或S)中的元组在S(或R)中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组形成连接,放置在结果关系中,这种连接称之为外连接(Outer Join)。
左外连接 = 自然连接(或 θ \theta θ连接)+左侧表中失配的元组
右外连接 = 自然连接(或 θ \theta θ连接)+ 右侧表中失配的元组
全外连接 = 自然连接(或 θ \theta θ连接)+ 两侧表中失配的元组
左外连接
右外连接
全外连接
3.完整性约束
3.1实体完整性
关系的主码的属性值不能为空值;空值,不知道或者无意义的值
含义:关系中的元组对应显示世界中的一个个具体的个体,如果主码为空,则无法表示一个元组,也就无法表示现实世界中的个体,这是不允许的。
3.2参照完整性
如果关系R的外码Fk与关系S的主码Pk对应,则外码Fk或者为空,或者其值在关系S的主码中存在。
含义:如果外码为空,可以表示该元祖在关系S中的含义还没确定,所以是允许的;而如果外码Fk的值是关系S中主码Pk中不存在的,则说明该元组参照了一个不存在的元组,是不允许的
3.3用户自定义完整性
用户针对具体的应用环境定义的完整性约束条件。
例如:属性学号S#要求是10位整数,前4位代表年份。
DBMS自动支持实体完整性和参照完整性。同样DBMS运行用户自行定义有关的完整性约束条件,当有更新操作发生时,DBMS自行检查更新操作是否合法(符合用户自定义完整性)。