4.1 关系数据库的基本概念
4.1.1 关系的形式化定义
1.关系的集合表示
关系:元祖的集合。每个属性都有其相应的域(Domain)
定义:域D1,D2,...,Dn上的关系(Ralation)就是笛卡尔积D1×D2×...×Dn的子集,用R(D1,D2,...,Dn)来表示,这里的R表示关系名,n称为关系的目(或者是度Degree),其中:R
⊆ D1×D2×...×Dn。关系成员为元祖,即(d1,d2,...,dn)。
(1)关系的特点:
1)关系可以看做行和列交叉组成的二维表。它表示的是一个实体集。
2)一行为一个元祖,用于表示一个实体。
3)表中的列称为属性,每一列有且仅有一个属性名。
4)列的取值范围称为域。
5)表中任意两行不能相同(即不可出现重复元祖)。能唯一标识表中不同行的属性或属性组称为键。
(2)关系的性质
1)属性为原子属性,不可分解。
2)不可以有重复的元祖
3)行序和列序无意义(有时候为了方便会添加列序)
(3)键的种类
1)超键:在一个关系中,能唯一标识元祖的属性或属性集。
2)候选键:如果一个属性或属性集能够唯一标识元祖,而且又不含多余的属性。
3)主键:能够唯一标识元祖的属性或属性集中所选取的键。
4)外键:用于联系表与表之间的关系的键。
2. 关系的一阶谓词表示
R={ t | P(t) },表示所有使谓词P为真的元祖t(其中t为个体变元)都属于关系R。
4.1.2 关系模式、关系子模式和存储模式
1. 关系模式:对关系的描述。形式:R(A1,A2,...,An)
2. 关系子模式
3. 存储模式
4.1.3 关系模型的完整性规则
1.实体完整性规则
2.参照完整性规则
3.用户定义的完整性规则
4.2 关系代数
4.2.1 关系代数的五个基本操作:选择σ、投影π、笛卡尔积×、并∪、差-。
1.并运算:R∪S = {t | t ∈ R ∨ t ∈ S},t为元祖变量。
2.差运算:R - S = {t | t ∈ R ∧ t ∉ S }
3.笛卡尔积:R × S = { t | t = <t(n),t(m)>∧t(n)∈R∧t(m) ∈ S}(其中t(n)表示t有n个分量,t(m)也是一样)
4.选择运算:σc(R) = { t | t ∈ R ∧ C[ t ] = True }(其中C为逻辑条件表达式)
C(逻辑条件表达式)的组成规则:
①α θ β 其中:α和β为属性名或常量,但不可以同时为常量。θ为比较运算符。(>,<,<=,>=,=,!=)。
②若干基本逻辑条件由∧、∨、非构成的复合逻辑条件。
5.投影运算:πAi1,Ai2,...,Ain(R) = {t | t = < ti1 , ti2 , ... , tim > ∈ R }
4.2.2 关系代数的组合操作
1.交运算:R ∩ S = {t | t ∈ R ∧ t ∈ S },t是元祖变量
R ∩ S = R - (R - S)或 R ∩ S = S - (S - R)
2.连接运算
(1)条件连接:二目运算、又叫θ链接,用于将两个关系合并成一个关系。
(2)自然连接(Natural Join):二目运算,是θ连接的一种特例, 首要条件:它们必须有公共属性且值域必须相同。
R 自然连接 S =
∏
i1,i2,...im(σR.B1 = S.B1
∧S.B2∧...∧R,Bn = S.Bn(R × S ))
(3)半连接:(SemiJoin):R 半连接 S(R.A = S.B)= ∏ R(R 连接 S(R.A = S.B))
3.除法运算(Division):条件:①R中包含S中的属性 ②R中有些属性不出现在S中。
T(Quotient) = R ÷ S
T中属性由R中不出现在S中的属性组成,其元祖则是S中所有元祖在R中对应的那些元祖值。
4.3 关系演算
4.3.1 元祖关系演算:
并:R ∪ S = {t | R(t)∨ S(t)}
差:R - S = {t | R(t)∧ 非S(t)}
选择:σF(R) = {t | R(t) ∧ F'},其中F'是条件表达式F的谓词演算表示形式。
投影:∏ i1,i2, ... ,ik(R) = {t(k)| (存在u)(R(u)∧ t[1] = u[i1] ∧ ... ∧t[k] = u[ik])}
笛卡尔积:R × S = {t(r+s)|(存在u(t))(存在v(s)(R(u)∧S(v)∧ t[1] = u[1] ∧ ... ∧t[r] = u[r]∧t[r+1] = v[1])∧ ... ∧ t[r + s] = v[s])}
4.3.2 域关系演算
4.4 关系查询优化
4.4.1 查询优化的一般策略
1)尽早地执行一目运算(如选择、投影)
2)将先做笛卡尔积和选择结合起来,使之成为一个连接运算
3)同时计算一串选择和投影运算,以免分开运算而多次扫描文件
4)找出表达式中的公共子表达式
5)适当的预处理
6)将投影同前面的双目运算相结合。没有必要为了去掉一个或某几个属性而扫描一遍关系
4.4.2 关系代数优化
1.表达式的求值
2.关系代数的等价变换规则
(1)连接和笛卡尔积的交换律
E1 连接(F条件表达式) E2 = E2 连接(F条件表达式) E1
E1 连接 E2 = E2 连接 E1
E1 × E2 = E2 × E1
(2)连接和笛卡尔积的结合律
(E1 连接(F1)E2) 连接(F2)E3 = E1 连接(F1)( E2 连接(F2)E3)
(E1 连接 E2) 连接 E3 = E1 连接( E2 连接 E3)
(E1 × E2) × E3 = E1 × (E2 × E3)
(3)投影的串接
设L1,L2, ... ,Ln 为属性集,并且L1 ⊆ L2 ⊆ ... ⊆ Ln,则下式成立:
∏ L1(∏ L2(...(∏ Ln(E)))) = ∏ L1 (E)
(4)选择的串接
σF1(σF2(E)) = σF1∧F2(E)
(5)选择与投影的交换
如果条件F仅涉及属性A1,...,An,则下式成立:
∏ A1,...,An(σF(E)) = σF(∏ A1,...,An(E))
更一般地,如果条件F涉及不在A1, ... ,An 中出现的B1, ... ,Bm,那么下式成立:
∏ A1,...,An(σF(E)) = ∏ A1,...,An(σF(∏ A1,...,An(E)))
(6)将选择移入笛卡尔积
σF(E1 × E2) = σF(E1)× E2 (F涉及的属性都在E1中)
σF(E1 × E2) = σF(E1) ×σF(E2) (F = F1 ∧ F2,F1 涉及 E1,F2 涉及 E2)
σF(E1 × E2)= σF2(σF1(E1)× E2) (F = F1 ∧ F2,F1 涉及 E1,F2 涉及 E1和E2)
(7)选择与并运算交换
如果有表达式 E = E1 ∪ E2,设在E1中出现的属性名与E2相同,下式成立:
σF(E1 ∪ E2) = σF(E1)∪ σF(E2)
(8)选择与差运算交换
σF(E1 - E2)= σF(E1)- σF(E2) (E1和E2具有相同的属性名)
(9)投影移入笛卡尔积
设A1, ... ,An是E中所出现的属性,而B1, .... ,Bm是E2中所出现的。下式成立:
∏ A1,...,An,B1, ... ,Bn(E1 ∪ E2) = ∏ A1,...,An(E1) × ∏ B1,...,Bn(E2)
(10)投影移入并运算
∏ A1,...,An(E1 ∪ E2) = ∏ A1,...,An(E1) ∪ ∏ A1,...,An(E2)
3.代数优化算法