数据库概论.陈立军.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\) 必须存在,也即必须与客观存在的实体发生联系
用户定义的完整性
- 用户针对具体应用环境定义的完整性约束条件
- 数据库应该支持这些功能,否则对应用程序言而言,就需要它自己去判断
比较
- 实体完整性和参照完整性由系统自动支持
- 系统提供定义和检验用户定义的完整性的机制