数据库复习二

# 关系模型概述:

  • 关系数据库系统:是支持关系模型的数据库系统

# 关系模型的组成

# 一、关系数据结构 —— 关系 (二维表)

关系数据结构特点:实体和联系都用关系这种单一的数据结构来实现

# 二、关系操作集合
  • 并、交、差
  • 广义笛卡尔积
  • 选择、投影、连接、除
  • 插入、删除、修改

关系操作的特点:操作对象和操作结果都是集合

关系语言:

  • 关系代数
  • 元组演算
  • 域演算
  • SQL
# 三、关系完整性约束

实体完整性、参照完整性、用户定义完整性

# 关系的形式化定义

# 一、关系的定义

1、域 (Domain): 一组具有相同数据类型的值的集合。如整数、字符串等

2、笛卡尔积:给定一组域D1,D2,...,DnD_1,D_2,...,D_n (可相同),D1,D2,...,DnD_1,D_2,...,D_n 上的笛卡尔积为:D_1\times D_2\times...\times D_n=\

(d1,d2,...,dn)(d_1,d_2,...,d_n) 称为一个元组 (Tuple)

did_i 叫做元组(d1,d2,...,dn)(d_1,d_2,...,d_n) 的第 i 个分量 (component)

3、关系 (Relation):D1×D2×...×DnD_1\times D_2\times...\times D_n 的一个子集叫做域D1,D2,...,DnD_1,D_2,...,D_n 上的关系,表示为R(D1,D2,...,Dn)R(D_1,D_2,...,D_n)

R 是关系名,n 是关系的目或度

定义在 n 个域上的关系称为 n 元关系

4、基数 (Cardinal number)

  • 一个域允许的不同取值个数称为这个域的基数

  • Di(i=1,2,...,n)D_i(i=1,2,...,n) 为有限集,其基数为mi(i=1,2,...,n)m_i(i=1,2,...,n),则D1×D2×...×DnD_1\times D_2\times...\times D_n 的基数 M 为:M=i=1nmiM=\prod\limits_{i=1}^nm_i

  • 在关系中,基数是指行数

5、候选码:能唯一标识元组的属性 (组)

6、主码:多个候选码中选定一个作主码

7、主属性:候选码中的诸属性

8、非主属性:不出现在任何候选码的属性。

# 二、关系应具有的六条性质

  • 列是同质的

  • 不同的列可以出自同一个域

  • 列序无关性

  • 任意两个元组不能完全相同

  • 行序无关性

  • 分量不可再分

# 关系的完整性约束

关系的完整性分为实体完整性、参照完整性和用户定义完整性

设 F 是基本关系 R 的一个或一组属性但不是关系 R 的码。如果 F 与基本关系 S 的主码KSK_S 相对应,则称 F 是基本关系 R 的外码。基本关系 R 称为参照关系,基本关系 S 被称为被参照关系或目标关系。

说明:

  • 关系 R 和关系 S 不一定是不同的关系
  • 目标关系 S 的主码KSK_S 和参照关系的外码 F 必须定义在同一个 (或同一组) 域上
  • 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同名字,以便与识别

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

  • 空值:不知道或不存在
  • 实体完整性规则规定基本关系的所有主属性都不能取空值

# 2. 参照完整性规则

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

  • 或者取空值 (F 的每个属性值均为空值)
  • 或者等于 S 中某个元组的主码值

# 3. 用户定义完整性

  • 用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。通常由 RDBMS 的 Check 约束提供这类检查

# 关系代数

# 一、关系上的传统集合运算

1、并:RSR\cup S

2、交:RS=R(RS)R\cap S = R-(R-S)

3、差:RSR-S

4、广义笛卡尔积R×SR\times S (R 是k1k_1 行 n 列,S 为k2k_2 行 m 列)

  • 列:(n+m) 列的元组集合
  • 行:k1×k2k_1\times k_2 个元组

# 二、专门的关系运算 (选择、投影、连接、除)

1、选择 (σ\sigma)

  • 含义:在关系 R 中选择满足给定条件的元组σF(R)={ttRF(t)=True}\sigma_{F}(R)={\{}t\vert t\in R\land F(t)='True'{\}}
  • 其中 F:选择条件,是一个逻辑表达式

2、投影 (π\pi)

  • 含义:从 R 中选择出若干属性列组成新的关系πA(R)={t[A]tR}\pi_{A}(R)={\{}t[A]\vert t\in R{\}}
  • A:R 中的属性列的集合
  • 投影操作主要是从列的角度进行运算

3、连接 (\bowtie)

  • 含义:从两个关系的广义笛卡尔积中选取属性间满足一定条件的元组。

    RAθBS={trtstrRtsStr[A]θts[B]}R\bowtie_{A\theta B}S= \{ \overset{\frown}{t_rt_s}\vert t_r\in R\land t_s\in S \land t_r[A]\theta t_s[B] \}

    • A 和 B:分别为 R 和 S 上度数相等且可比的属性组
    • θ\theta:比较运算符
  • 连接运算从 R 和 S 的广义笛卡尔积R×SR\times S 中选取 (R 关系) 在 A 属性组上的值与 (S 关系) 在 B 属性组上的值满足比较关系的元组

  • 带有比较运算符θ\theta 的连接运算符称为θ\theta 连接

自然连接:

  • 自然连接是一种特殊的等值连接

    • 两个关系中进行比较的分量必须是同名的属性 (组)
    • 在结果中把重复的属性列去掉
  • 自然连接的含义:R 和 S 具有相同的属性组 B

  • 自然连接解题思路:

    • 确定结果列中的属性列
    • 确定参数运算的关系的公共属性列 (同名属性取其一)
    • 逐一取 R 中的元组分别和 S 中与其公共属性组取值相同的元组拼接

外连接:如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值,这种连接就叫做外连接

左外连接:RSR⟕S

  • 如果只把左边关系 R 中要舍弃的元组保留就叫做左外连接

右外连接:RSR⟖S

  • 如果只把右边关系 S 中要舍弃的元组保留就叫做右外连接

全外连接:RSR⟗S

4、除

象集ZxZ_x

给定一个关系 R (X,Z),X 和 Z 为属性组。当 t [X]=x 时,x 在 R 中的象集为Zx={t[Z]tR,t[X]=x}Z_x={\{}t[Z]\vert t\in R,t[X]=x{\}}

它表示 R 中属性组 X 上值为 x 的诸元组在 Z 上分量的集合

如关系 R 如下:

XXZZ
x1x_1Z1Z_1
x1x_1Z2Z_2
x1x_1Z3Z_3
x2x_2Z2Z_2
x2x_2Z3Z_3
x3x_3Z1Z_1
x3x_3Z3Z_3
  • x1x_1RR 中的象集:Zx1={Z1,Z2,Z3}Z_{x_1}={\{}Z_1,Z_2,Z_3{\}}

  • x2x_2RR 中的象集:Zx2={Z2,Z3}Z_{x_2} ={\{}Z_2,Z_3{\}}

  • x3x_3RR 中的象集:Zx3={Z1,Z3}Z_{x_3}={\{} Z_1,Z_3{\}}

给定关系 R (X,Y) 和 S (X,Y),其中 X,Y,Z 为属性组。R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自相同的域集。R 与 S 的除运算得到一个新的关系 P (X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上分量值 x 的象集YXY_X 包含 S 在 Y 上投影的集合:

R÷S={tr[X]trRπY(S)YX}R\div S=\{t_r[X]\vert t_r\in R\land\pi_Y(S)\subseteq Y_X\}YXY_X:x 在 R 中的象集,x=tr[X]x=t_r[X]

÷:R(X,Y)÷S(Y,Z)={tr[X]trRπY(S)YXx=tr[X]}\div : R(X,Y)\div S (Y,Z)={\{}t_r[X]\vert t_r\in R\land\pi_Y (S)\subseteq Y_X\land x=t_r[X]{\}}

例子:查询选修了全部课程的学号和姓名:

πsno,sname(S)(πsno,cno(SC)÷πcno(C))\pi_{sno,sname}(S)\bowtie(\pi_{sno,cno} (SC)\div\pi_{cno} (C))

# 三、总结

水平方向运算:,,,σ\cup,\cap,-,\sigma

垂直方向运算:π\pi

混合运算:×,θ,,÷\times,\theta,\bowtie,\div

关系代数表达式:由关系的运算经过有限次的复合后形成的样子

# 关系演算

关系演算就是用谓词来描述关系的构成。按照谓词变元的不同分为元组演算和域演算

# 一、元组演算

{tϕ(t)}\{t\vert\phi(t)\} 称为元组演算表达式,其中 t 称为元组变量,ϕ(t)\phi(t) 称为元组演算公式

  • 原子公式:

    • R(t)R(t)

      R 是关系名,t 是元组变量。表示:t 是 R 中的元组

    • t[i]θu[j]t[i]\theta u[j]

      t,u 为元组变量,θ\theta 为比较运算符。表示:元组 t 的第 i 个分量与元组 u 的第 j 个分量之间满足比较关系θ\theta

    • t[i]θccθt[i]t[i]\theta c\quad c\theta t[i],其中 c 为常量

关系代数表达式与元组演算表达式的等价转换:

  • RS{tR(t)S(t)}R\cup S\equiv{\{}t\vert R(t) \lor S(t){\}}

  • RS{tR(t)S(t)}R \cap S\equiv{\{}t\vert R (t) \land S(t){\}}

  • R×S{tm+nu(m)v(n)(R(u)S(v)t[1]=u[1]...t[m]=u[m]t[m+1]=v[1]...t[m+n]=v[n])}R\times S\equiv\{t^{m+n}\vert\exists u^{(m)}\exists v^{(n)}(R(u)\land S(v)\land t[1]=u[1]\land...\land t[m]=u[m]\land t[m+1]=v[1]\land...\land t[m+n]=v[n]) \}

  • σF(R){tR(t)F}\sigma_F(R)\equiv{\{}t\vert R(t)\land F{\}}

  • \pi_{i_{1},i_{2},...,i_{k}}(R)\equiv {\{} t^{(k)}\vert\exists u(R(u)\and t[1]=t[i_{1}]\land...\land t[k]=u[i_{k}]) {\}}

元组演算的等价规则:

  • P1P2¬(¬P1¬P2)P_1\land P_2\Leftrightarrow\lnot(\lnot P_1\lor\lnot P_2)

  • P1P2¬(¬P1¬P2)P_1\lor P_2\Leftrightarrow\lnot(\lnot P_1\land\lnot P_2)

  • x(P(x))¬x(¬P(x))\forall x(P(x))\Leftrightarrow\lnot\exists x(\lnot P(x))

  • x(P(x))¬x(¬P(x))\exists x(P(x))\Leftrightarrow\lnot\forall x(\lnot P(x))

  • P1P2¬P1P2P_1\rightarrow P_2\Leftrightarrow\lnot P_1\lor P_2