一、绪论

1.1 数据模型

1.1.1 数据模型概述

  • 数据模型是严格定义的一组概念,精确的描述了系统的静态特性、动态特性和完整性约束
  • 组成要素
    • 数据结构:描述系统的静态特性,即组成数据库的对象类型
    • 数据操作:描述系统的动态特性,即对数据库中对象的实例允许执行的操作的集合,包括操作及操作规则
    • 数据的约束条件:数据的约束条件是完整性规则的集合,规定数据库状态及状态变化所应满足的条件,以保证数据的正确、有效
  • 类型
    • 概念模型
    • 层次模型
    • 网状模型
    • 关系模型

1.1.2 实体-联系模型(E-R模型)

  • 基本概念
    • 世界是由一组称作实体的基本对象和这些对象之间的联系构成的
    • 实体(Entity):客观存在并可相互区别的人、事物、事件和概念
    • 属性(Attribute):实体具有的特性
    • 码(Key、实体标识符):唯一标识实体的属性集
    • 域(Domain):属性的取值范围
    • 实体型(Entity Type):用实体名及其属性名集合来抽象刻画同类实体
    • 实体集(Entity Set):同型实体的集合,如全体学生,全部的系
    • 联系(Relationship):实体(型)内部的联系(组成实体的各属性间);实体(型)之间的联系(不同的实体集之间)
  • 图形表示
    • 矩形框 – 实体型
    • 菱形框 – 联系类型
    • 椭圆形框 – 实体型/联系类型的属性
    • 直线 – 实体型与联系之间用直线相连,线旁标注联系的种类(1:1, 1:N, M:N)
    • 实体集属性中作为主码的一部分的属性用下划线来标明
    • 在1:N的联系中,联系集的主码是n端的主码

1.1.3 由E-R图到数据库设计

  • E-R图的设计要点
    • 确定实体:实体名、实体属性、实体码
    • 确定联系:存在性联系、功能性联系、事件联系
  • E-R图向关系模型的转换
    • 实体→关系
    • 属性→关系的属性
    • 一对一联系→新的关系,属性为双方的码
    • 一对一联系→与某一端关系合并,合并后在该端加入另一端关系的码和联系本身的属性,其码不变
    • 多对多联系→新的关系,其属性为与该联系相连的各实体的码以及联系本身的属性,其码是与该联系相连的各实体的码的组合
    • 一对多联系→新的关系,其属性为与该联系相连的各实体的码以及联系本身的属性,其码是n端实体的码
    • 一对多联系→与n端关系合并,合并后在n端关系加入1端关系的码和联系本身的属性,n端关系的码不变
    • 三个或三个以上实体间的多元联系→新的关系,其属性为与该多元联系相连的各实体的码以及联系本身的属性,其码是与该联系相连的各实体的码的组合
    • 合并具有相同码的关系模式,并去除同义属性
  • 从关系模型到数据库实施
    • 定义数据库结构:表结构、视图
    • 装载数据
    • 编制与调试应用程序
    • 数据库试运行
    • 数据库运行与维护

1.1.4 关系模型

  • 关系模型使用二维表来表示实体及其联系:行、列

    • 用表格表示实体集,用列表示属性,表结构表示实体的型
    • 用表间的特定冗余信息表示实体间的联系(主键、外键)
    • 行、列无序
    • 列不可再分
  • 关系模型中的概念

    • 关系:即通常说的表,用于表示实体以及实体间的联系
    • 元组:表中的一行即为一个元组
    • 属性:表中的一列即为一个属性
    • 主码(key):图中的某个属性组,它可以唯一确定一个元组
    • 域(domain):属性的取值范围
    • 分量:元组中的一个属性值
    • 关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,…,属性n)

1.2 数据库系统

  • 数据库系统:由应用程序、DBMS、操作系统、硬件、人员(数据库管理员DBA)组成
  • 数据库管理系统DBMS
    • DB定义
    • 操纵语言及编译程序
    • DB运行控制程序
    • 实用程序

二、关系数据库

2.1 关系数据结构

  • 域:一组值的集合,这组值具有相同的数据类型
  • 笛卡尔积
    • 一组域$D_1,D_2,\cdots,D_n$的笛卡尔积为:$D_1\times D_2\times\cdots\times D_n = {(d_1 , d_2 , \cdots, d_n)\vert d_i∈D_i , i=1,\cdots,n}$
    • 笛卡尔积的每个元素$(d_1,d_2,\cdots,d_n)$称作一个$n$元组
    • 元组的每个值$d_i$称为一个分量
    • 若$D_i$的基数为$m_i$,则笛卡尔积的基数为$$\prod\limits_{i=1}^{n}m_i$$
  • 关系
    • 笛卡尔积$D_1\times D_2\times\cdots\times D_n$的子集叫做在域$D_1,D_2,\cdots,D_n$上的关系,用$R(D_1 , D_2 ,\cdots, D_n )$表示
    • 关系是笛卡尔积中有意义的子集
  • 候选码
    • 关系中的一个属性组,其值能唯一标识一个元组。
    • 若从该属性组中去掉任何一个属性,它就不具有这一性质
  • 主属性:任何一个候选码中的属性称作主属性
  • 主码:从一个关系的多个候选码中选定一个作为主码
  • 外部码:关系R中的一个属性组,它不是R的码,但它与另一个关系S的码相对应,则称这个属性组为R的外部码
  • 关系模式
    • 关系的描述称作关系模式,包括关系名、关系中的属性名、属性向域的映象、属性间的数据依赖关系等
    • 关系模式是一个5元组$R(U,D,Dom,F)$,其中R是关系名;U是关系的属性集合;D是U中属性所来自的域的集合;DOM是属性向域映射的集合;F是属性间的依赖关系集合
  • 关系数据库
    • 在一个应用领域内,用关系表示实体及其联系,关系的集合构成一个关系数据库
    • 其型是关系模式的集合,即数据库描述,称作数据库的内涵(Intension)
    • 其值是某一时刻关系的集合,称作数据库的外延(Extension)

2.2 关系的完整性

  • 实体完整性:若属性A是基本关系R的主属性,则A不能取空值
  • 参照完整性:如果关系$R_2$的外部码$F_k$与关系$R_1$的主码$P_k$相对应,则$R_2$中的每一个元组的$F_k$值或者等于$R_1$中某个元组的$P_k$值,或者为空值
  • 用户定义的完整性:用户针对具体的应用环境定义的完整性约束条件

2.3 关系代数

  • 关系代数是一种抽象的查询语言,通过对关系的运算来表达查询操作

  • 基本概念

    • 如果两个关系的属性数目相同,且各属性的域相同,则两个关系是相容的
    • 元组的连串:若$r=(r_1,r_2,\cdots,r_n)$,$s=(s_1,s_2,\cdots,s_n)$则定义二者的连串$\widehat{AB}=(r_1,r_2,\cdots,r_n,s_1,s_2,\cdots,s_n)$
    • 给定关系模式$R(A_1 , A_2 ,\cdots, A_n)$,设$R$是它的一个具体的关系,$t\in R$是关系的一个元组
      • $A={A_{i1},A_{i2},\cdots,A_{ik}}\subseteq {A_a,A_2,\cdots,A_n}$是属性列,$\overline{A}$表示${A_1,A_2,\cdots,A_n}$去掉$A$后剩余的属性组
      • $t[A_i]$表示元组$t$中相应于属性$A_i$的一个分量
      • $t[A]={t[A_{i1}],t[A_{i2}],\cdots,t[A_{ik}]}$表示元组$t$在属性列$A$上各分量的集合
      • 给定关系$R(X,Z)$,$X$和$Z$为属性组。当$t[X]=x$时,$x$在$R$中的象集为:$Z_X={t[Z]\vert t∈ R,t[X]=x}$ ,它表示$R$中属性组$X$上值为$x$的诸元组在$Z$上分量的集合
  • 集合运算符(进行集合运算的两个关系必须相容):并$\cup$、交$\cap$、差$-$

  • 关系运算符

    • 笛卡尔积$\times$

      • 设两个关系R,S,其度分别为n,m,则它们的广义笛卡尔积为$R\times S={\widehat{rs}\vert r\in R\land s\in S}$
    • 选择$\sigma$

      • $\sigma_F(R)={t\vert t\in R\land F(t)=true}$
      • 即$\sigma$运算的结果为满足条件F的元组集合
    • 投影$\Pi$

      • $\Pi_A(R)={t[A]\vert t\in R}$,其中$A$为$R$的属性列
      • 投影结果中要去掉相同的行
    • 连接$\Join$

      • $R\underset{A\Theta B}\Join S={\widehat{rs}|r\in R\land s\in S\land r[A]\Theta S[B]}$

      • $R\underset{A\Theta B}\Join S=\sigma_{R[A]\Theta S[B]}(R\times S)$

      • 即从两个关系的笛卡尔积中选取给定属性间满足一定条件的元组

      • 等值连接:从两个关系的广义笛卡儿积中选取满足某一等值条件的元组,两个关系可以没有相同属性列

      • 自然连接:特殊的等值连接,从两个关系的广义笛卡儿积中选取在相同属性列上取值相等的元组,并去掉重复的列

    • 除$÷$

      • 设有关系$R(X,Y)$和$S(Y,Z)$,则$R÷Z$可根据如下过程得到
      • 在关系$S$中对$Y$做投影,得到$\Pi_Y(Z)$
      • 关系$R$在属性列$X$上作取消重复值的投影,得到$\Pi_X(R)$
      • 判断$\Pi_X(R)$中$x_i$的象集$Y_i$是否包含$\Pi_Y(Z)$,如果包含,则最终结果中包含$x_i$
      • 即$R÷Z$表示【$R$在$X$上分量值$x$的象集$Y_x$包含$S$在$Y$上投影的集合】在$X$属性列上的投影
  • 比较运算符:<、≤、>、≥、≠、=

  • 逻辑运算符:与$\land$、或$\lor$、非$\lnot$