数据库概论.陈立军.03.关系模型(1)

关系模型

  • 简单即是有力

关系模型基本概念

  • Table
    • An arrangement of words, numbers, orsigns, or combinations of them, as in parallel columns, to exhibit a set off acts or relations in a definite, compact, and comprehensive form; a synopsis or scheme.

关系模型的诞生

  • E.F.Codd 于 70 年代初提出关系数据理论,他因此获得 1981 年的 ACM 图灵奖
    • 1970: “A Relational Model of data for Large Shared Data Banks”
  • 提出关系代数和关系演算
  • 1972:1NF, 2NF, 3NF
  • 1974:BCNF
  • 关系理论建立在集合代数理论基础之上,有着坚实的数学基础

早期代表系统

  • SystemR:由 IBM 研制
  • INGRES:由加州 Berkeley 分校研制

数据库与图灵奖

  • 数据库有 4 位获得图灵奖的人
  • Charles W. Bachman(查尔斯 • 巴赫曼)
    • 1973 主持设计与开发了最早的网状数据库管理系统 IDS
  • Edgar F. Codd(埃德加 • 科德)
    • 1981 提出了关系数据库
  • James Gray(詹姆斯 • 格雷)
    • 1998 解决保障数据的完整性、安全性、并行性,以及从故障恢复方面发挥了十分关键的作用,提出并实现数据库事务处理
  • Michael Stonebraker(迈克尔.斯通布雷克)
    • 2014 创造了数据库系统一系列奠基性基本概念和实际技术
    • 基于 INGRES

目前主流的商业数据库系统

  • Oracle, SQLServer, DB2
  • 开源数据库:MySQL, PostgreSQL
  • OceanBase, GaussDB, 达梦
    • GaussDB 基于 PostgreSQL:华为
    • 达梦:武大
    • OceanBase:阿里
  • Access, SQLite
    • SOLite 装机量最大,手机上都有

笛卡尔积

基本概念

  • (Domain)
    • 具有相同数据类型的一组值的集合
    • 如整数集合、字符串集合、全体学生集合
  • 一组域 \(D_1,D_1,\cdots,D_n\)笛卡尔积

\[ D_1\times D_2\times\cdots\times D_n=\left\{(d_1,d_2,\cdots,d_n)|d_i\in D_i,i=1,2,\cdots,n\right\} \]

  • n 元组(tuple):笛卡尔积的元素 \((d_1,d_2,\cdots,d_n)\)
  • 元组的每个值 \(d_i\) 称作分量(component)
  • \(D_i\) 的基数为 \(m_i\),则笛卡尔积的基数\(\prod_{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\) 是关系的名字,\(n\) 是关系的

笛卡尔积与关系

  • 笛卡尔积:可能的世界
  • 关系:实际的世界
  • 关系是笛卡尔积中有意义的子集
    • 有意义:子集得有名字
    • 名称不一样,反应的现实中的关系也不一样
    • 例子
      • Teach(老师、学生、课程):老师教授课程
      • Assistant(老师、学生、课程):学生给老师当助教

数学问题

  • \(D_1,D_2,D_3\) 的基数分别为 \(d_1,d_2.d_3\),则 \(D_1\times D_2\times D_3\) 包含的关系数目

    • 笛卡尔积元组个数:\(d_1\times d_2\times d_3\)
  • 关系数目:\(2^{d_1\times d_2\times d_3}\)

  • 13 个元素的集合,划分为多少个域,每个域多少个元素,使得笛卡尔积包含的关系数目最多

    • 4 x 3 x 3 x 3 = 108
    • 关系数目:\(2^{108}\)

关系的性质

  • 列是同质的,是同一类型的数据,即每一列中的分量来自同一域
  • 不同的列可以来自同一域,每列必须有不同的属性名
    • 一元联系
  • 行列的顺序无关紧要
  • 任意两个元组不能完全相同(集合内不能有相同的两个元素)
    • 实际的数据库的表允许重复行的存在
  • 每一分量必须是不可再分的数据,称其为作满足第一范式(1NF)的关系

  • 从查询的角度,深入分析嵌套关系的利弊
    • 如果查询某个学生选修的课程哪些
      • 嵌套关系性能更高,直接通过学号索引就行
      • 1NF 关系需要先对学号过滤,再取出来课程
    • 如果查询选修的某个课程的学生有哪些
      • 嵌套关系没办法直接表达(无法使用声明式查询,需要编程进行路径式查询)
      • 1NF 各种属性的查询没有区别

关系模型 3 要素

数据结构

  • 单一的数据结构:关系
    • 实体集、联系都表示成关系
  • 单一的数据结构好处是什么
    • 实现数据库的时候,只需要实现一种数据结构

  • 候选码(Candidate Key)
    • 关系中的一个属性组,其值能唯一标识一个元组
    • 若从属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码
  • 任何一个候选码中的属性称作主属性
    • 主属性:存在一个候选码包含这个属性
  • 主码(PK: Primary Key)
    • 进行数据库设计时,从一个关系的多个候选码选定一个作为主码
  • 外码(FK: Foreign Key)
    • 关系 R 中的一个属性组,它不是 R 的码,但它与另一个关系 S 的码相对应,称这个属性组为 R 的外码
    • 反映实体之间的联系

关系模式与关系

关系模式
  • 关系的描述,记作 \(R(A_1,A_2,\cdots,A_n)\) 包括:
    • 关系名关系中的属性名
    • 属性向域的映象,通常说明为属性的类型、长度等
    • 属性间的数据依赖关系
      • 比如在特定的时间和教室只能安排一门课
  • 关系模式,是稳定
关系
  • 某一时刻对应某个关系模式的内容(元组的集合)
  • 关系某一时刻的值,是随时间不断变化

关系数据库的构成

  • 关系数据库的
    • 关系模式的集合,即数据库描述
    • 称作数据库的内涵(Intension)
  • 关系数据库的
    • 某一时刻关系的集合
    • 称作数据库的外延(Extension)

数据操作

关系操作

  • 关系操作是集合操作
  • 操作的对象及结果都是集合
  • 一次一集合(Set-at-a-time)的方式
    • 非关系型的数据操作方式是一次一记录 (Record-at-a-time)

关系数据语言的特点

  • 一体化
    • 对象单一,都是关系,因此操作符也单一
  • 非过程化
    • 用户只需提出 “做什么”,无须说明 “怎么做”
    • 存取路径的选择和操作过程由系统自动完成
  • 面向集合的存取方式
    • 操作对象是一个或多个关系,结果是一个新的关系(一次一关系)

抽象的关系模型查询语言

  • 关系代数(主流)
  • 关系演算
    • 元组关系演算
    • 域关系演算
关系演算
  • 谓词来表达查询,只需描述所需信息的特性
  • 元组关系演算
    • 谓词变元的基本对象元组变量
  • 域关系演算
    • 谓词变元的基本对象域变量
关系代数
  • 对关系的运算来表达查询
  • 需要指明所用操作
  • 相比关系演算,关系代数是过程性操作语言
    • 这里的过程性指的是需要人为地把关系序列定义出来
      • 和之前的过程性查询不是一个概念
    • 而关系演算只是通过一系列谓词来描述
具体系统中的关系操作语言
  • SQL
    • 介于关系代数和关系演算之间
    • 由 IBM 公司在研制 System R 时提出
  • QUEL
    • 基于 Codd 提出的元组关系演算语言 ALPHA
    • 在 INGRES 上实现
  • QBE
    • 基于域关系演算
    • 由 IBM 公司研制

完整性约束

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

实体完整性

  • 关系的主码中的属性值不能为空值
  • 意义:关系对应到现实世界中的实体集,元组对应到实体,实体是相互可区分的,通过主码来唯一标识,若主码为空,则出现不可标识的实体,这是不容许的
  • 三值逻辑

参照完整性

  • 相对于外码而言的
  • 如果关系 \(R_2\) 的外码 \(F_k\) 与关系 \(R_1\) 的主码 \(P_k\) 相对应,则 \(R_2\) 中每个元组的 \(F_k\) 值或者等于 \(R_1\) 中某个元组的 \(P_k\),或者为空值
    • 空值是允许的,可以认为是未分配、不知道
  • 如果关系 \(R_2\) 的某个元组 \(t_2\) 参照了关系 \(R_1\) 的某个元组 \(t_1\),则 \(t_1\) 必须存在,也即必须与客观存在的实体发生联系

用户定义的完整性

  • 用户针对具体应用环境定义的完整性约束条件
  • 数据库应该支持这些功能,否则对应用程序言而言,就需要它自己去判断

比较

  • 实体完整性和参照完整性由系统自动支持
  • 系统提供定义和检验用户定义的完整性的机制