关系数据库

  • 关系数据结构
    • 关系
      • 域:一组具有相同数据类型的集合。
      • 元组:给定一组域 D1,D2,,DnD_1,D_2,\dots,D_nD1×D2××DnD_1\times D_2\times \cdots\times D_n 中的元素 (d1,d2,,dn)(d_1,d_2,\dots,d_n) 称为 nn 元组。
      • 分量:元组中的每一个 did_i
      • 关系:D1×D2××DnD_1\times D_2\times \cdots\times D_n 的子集,记作 R(D1,D2,,Dn)R(D_1,D_2,\dots,D_n)
      • 属性:关系中每一个分量的名字。
      • 键:可以唯一标识关系中的元组的属性或属性组。
      • 候选键:任意真子集不是键的键。
      • 主属性:组成候选键的元素。
      • 全键:所有属性组成的键。
    • 关系完整性
      • 实体完整性
        • 主属性不能取空值,并且唯一。
      • 参照完整性
        • 已知 R(KR,F,),S(KS,)R(K_R,F,\dots),S(K_S,\dots),且 FFSKS_K 对应,则 FFRR 的外键,RR 是参照关系,SS 是被参照关系。
        • FFKSK_S 必须是同一个域,RRSS 可以是同一个关系。
        • FF 的取值必须是 SS 中某个 KSK_S 的取值,或是空值。
      • 用户定义完整性
        • 用户根据具体需求定义的约束。
        • 关系模型提供检验的机制,不需要应用程序检验。
  • 关系代数
    • 传统集合运算
      • 参考集合中的内容。主要常用的有交、并、差、笛卡尔积。
    • 选择
      • 已知关系 R(A1,A2,,An)R(A_1,A_2,\dots,A_n),元组 tRt\in R,规定:
        • t[Ai]t[A_i] 表示 tt 中对应 AiA_i 的分量。
        • A=Ai1,Ai2,,AikA={A_{i_1},A_{i_2},\dots,A_{i_k}},则 t[A]t[A] 表示 ttAA 中所有属性对应的分量
      • 定义 RR 的选择为在 RR 中选择满足谓词 FF 的元组的集合,记作 σF(R)\sigma_F(R)
      • σF(R)={ttRF(t)}\sigma_F(R) = \{t \mid t \in R \land F(t)\}
    • 投影
      • 定义 RR 的投影为在 RR 中选择指定的属性集 AA 组成的关系,记作 ΠA(R)\Pi_A(R)
      • ΠA(R)={t[A]tR}\Pi_A(R) = \{t[A] \mid t \in R\}
      • 原关系中的元组在选择指定的属性后可能会重复,投影结果则不包含重复。
    • 连接
      • 已知元组 t1,t2t_1,t_2,规定 t1t2\stackrel{\frown}{t_1 t_2} 表示两个元组拼接。
      • 已知关系 R,SR,S、属性集 A,BA,B、谓词 FF,定义连接为将 R,SR,S 中所有符合条件的元组拼接的结果,条件是 A,BA,B 满足的条件,记作 RF(A,B)SR \underset{F(A,B)}{\Join} S
      • RF(A,B)S={tRtStRAtSSF(tR[A],tS[B])}R \underset{F(A,B)}{\Join} S = \{\stackrel{\frown}{t_R t_S} \mid t_R \in A \land t_S \in S \land F(t_R[A],t_S[B])\}
      • 连接的一种特殊形式是等值连接:RA=BSR \underset{A=B}{\Join} S
      • 等值连接的一种特殊形式是自然连接:RSR \Join S 中比较 R,SR,S 中共同的属性集,并去除重复列。
      • 已知关系 R(X,Y),S(Y,Z)R(X,Y),S(Y,Z)X,Y,ZX,Y,Z 为属性集,定义除 R÷SR\div S 为所有 xtR[X]x \in t_R[X] 满足 ΠY(S)ΠY(σtR[X]=x(R))\Pi_Y(S) \subseteq \Pi_Y(\sigma_{t_R[X] = x}(R))
  • 设计