目录
最早出现层次和网状数据模型
-
层次模型
- 思路
- tree数据结构表示现实世界
- 概念
- 记录(record)
- 把现实世界一个实体表达为一个记录
- 域(field)
- 一个记录由若干个域来描述
- 双亲子女关系(PCR)
- 两个不同关系记录之间存在一对多的关系
- 表达现实生活中一对多的关系
- 例子:院系是一个记录类型,班级是一个记录类型,一个系下面有多个班(形的定义)
- 记录(record)
-
层次型数据库的数据模式
- 一个层次数据模型有多个PCR
- 每一个PCR表示一个1对多的关系
- 每个记录类型只能有一个双亲
- 虚记录
- 一对多能解决,多对多怎么解决
- 引入虚记录
- 避免数据的冗余,维持PCR的树形结构
- 引入指针,由虚记录指向相应的真实记录
- 避免数据的冗余,维持PCR的树形结构
- 思路
-
网状数据模型
- 思路
- 数据结构系(set),现实世界中两个记录类型之间一个一对多的关系,一是主记录,多是属记录。一个记录类型可以是多个类型的主记录,也可以是多个类型的属记录。
- 概念
- 突破了层次结构的限制,能更容易地表示非层次型数据
- 记录(record)
- 数据项data items
- 与域相似,但它可以是向量
- set 表达两个记录类型的一对多关系
- 链表
- Link记录类型
- 可以表示多对多关系
- 可以表示多元关系
- 类型内的自连接
- 用雇员 (下属) 与对应的link构成一个系s1
- link对雇员 (下属) 之间构成系s2
- 思路
-
关系数据模型
-
思路
- 表(relation).将现实生活中实体和实体之间的联系全部用表来表示,可以采用数学的研究方法进行研究
-
特性
- 基于数学集合论,有更高的抽象级别(树,链表,指针...都被屏蔽)
- 屏蔽了所有的底层细节,易于理解(表)
- 可以建立新的代数系统----关系代数
- 定义一个非过程化的查询语言----SQL
- 非过程化语言,不需要程序员自己编写一步步的程序
- 软连接
- 一种逻辑指针(把某个值看作地址)
-
术语和概念
-
属性(Attribute)
- 列
- 一个实体的多种方面的信息,称为属性
-
域(Domain)
- 每一个属性有一定的取值范围,称为域,表内数据的要求
- 原子数据(不可再分) 表不可以套娃
- 允许属性的值为空值, 空值为不知道,不是0也不是空串
-
关系 Relation
- 表
- 现实世界的实体和实体间的联系用关系表达(一个关系或多个关系)
- 关系是由多个属性构造
-
元组(Tuple)
- 表内每一行称为元组
-
目
- 属性的数量
-
主键
- 满足两个条件
- 这组属性的值能够唯一的决定其它的值,这个关系内任意两条不同的元组这个属性的值都不一样
- 该组属性的任意一个子集没有这个特性
- 例子:学生的学号主键
- 满足第一个而第二个不满足的话就称为超键
- 学号+姓名就是超键
- 候选键可能有多个,可以指定其中一个为主键,其余的为候补键
- 如果主键是由该关系内所有属性组成,则称为全键
- 满足两个条件
-
外键
- 在一个关系内,有一组属性用来引用另一张表内的元组,那么该外键应为另一张表的主键。
- 引用完整性:如果我们把外键看成是一个逻辑指针,那么该逻辑指针指向的不能为空(即没有)。
-
-
-
完整性约束
- 通过外键的引用完整性约束
- 域完整性约束:元组内的每个属性的值都要在定义的域的范围内
- 实体完整性约束:一个关系里定义的一个主键,主键的值不能为空,如果主键为空就无法进行唯一性标识
-
下面会用到的例子
sid | bid | day |
---|---|---|
22 | 101 | 10/10/96 |
58 | 103 | 11/12/96 |
sid | sname | rating | age |
---|---|---|---|
22 | dustin | 7 | 45.0 |
31 | lubber | 8 | 55.5 |
58 | rusty | 10 | 35.0 |
bid | bname | color |
---|---|---|
101 | tiger | red |
103 | lion | green |
105 | hero | blue |
sid | sname | rating | age |
---|---|---|---|
28 | yuppy | 9 | 35.0 |
31 | lubber | 8 | 55.5 |
44 | guppy | 5 | 35.0 |
58 | rusty | 10 | 35.0 |
-
关系代数
- 关系模型的理论基础
-
基本操作
- 选择操作σ 从一个表中把满足条件的元组选出来
- projection 投影操作π 将需要的属性列出来
- 笛卡尔乘积× 两个关系的拼接
- 集合差- 把属于关系A不属于关系B的元组找出来
- 并 ∪ 把两个模式相同的元组并起来
- 其他操作
- join
- division
- intersection
- outer union
- outer join
- 操作具体
- 投影操作运算结果的模式就是投影的属性列表的属性组成的
- 定义上说:投影操作要消除重复元组
- 实际数据库系统并不主动删除重复元组,除非用户主动要求
- 选择操作就是从一个表中把满足条件的元组选出来
- 选择操作不会产生重复元组【只要原关系中没有重复元组】
- 选择操作的模式与原关系的模式相同
- 选择操作的结果可以作为别的代数关系的输入
- 集合的并、交、差
- 参与集合的两个关系要满足两个条件
- 属性个数相同
- 属性类型要一样
- 参与集合的两个关系要满足两个条件
- 笛卡尔乘积
- 结果模式包括进行操作的两个表的所有属性,两张表的每条元组之间两两拼接
- 条件连接操作
- 由笛卡尔乘积和选择操作的结合
- 结果模式和笛卡尔乘积的模式相同
- 连接操作的结果的元组数比笛卡尔乘积的结果元组要少
- 等值连接操作
- 一种特殊的条件连接,连接条件只有等值的条件
- 结果模式和笛卡尔乘积的模式类似,把等值的属性去掉一列
- 自然连接:两张表在所有的公共属性上做等值连接(应用开发最常用的)
- Division 除法操作
- A/B = {<x>|ョ<x,y>∈A,∀<y>∈B}
- 计算思路:比如对于A/B来说,我们要找在关系A中跟关系B中所有y值都有联系的x值。(也就是找出在关系B中没有一个y值与A的是没有联系的。否定的否定)
- 假设A有两种属性,x和y;B只有一种属性y:
- 也可能x和y是一个集合
- 思路
- 先在A中找不满足除法条件的x
- 先把A做一个投影,投影到x属性
- 将投影结果和关系B做一个笛卡尔乘积
- 用笛卡尔乘积结果-A
- 对上一步结果做一个投影,投影到x
- 把关系A所有的x值减去所有不满足条件的x值
- 把关系A投影到x
- 投影结果减去上一操作找到的所有不满足条件的x值
- 先在A中找不满足除法条件的x
- Outer joins 外连接
- 解决情况:在自然连接中不满足连接操作的元组想要保留下来。
- 分类
- 左外连接
- 把连接运算符的左边的所有元组都要保留,找不到匹配的补空值
- 右外连接
- 把连接运算符的右边的所有元组都保留下来,找不到匹配的补空值
- 全外连接
- 把连接运算符的左右两边的所有元组都保留下来,找不到匹配的补空值
- 左外连接
- Outer Unions 外并操作
- 解决情况:把不满足并兼容条件的两个关系强行并起来。
- 结果的属性集是参与运算的两个关系的属性的并,元组也是参与运算的两个关系的元组的并,单一存在的补空值
- 投影操作运算结果的模式就是投影的属性列表的属性组成的
-
关系演算
- 关系代数是一种过程化的表达。
- 关系演算是一个非过程化的表达。
-
基本思路
- 关系演算中把各种布尔表达式称为公式,查询结果元组是能使公式为真的表内的元组。
-
TRC 元组关系演算
- 以元组为单位定义变量
- 查询语句:{t[<attribute list>] | P(t)}
- 取一个元组变量t内包含的若干属性,能使p(t)为真。
- 例子
- 找到一个级别大于7,且比50岁年轻的水手的姓名
- {t[N] | t ∈ Sailor ^ t.T>7 ^ t.A<50}
- 找到一个级别大于7,且比50岁年轻的水手的姓名
-
DRC 域关系演算
-
以属性为单位定义变量
-
查询语句:{<x1,x2,…,xn>|P(x1,x2,…,xn,xn+1,…,xn+m)}
-
在要查询的属性上定义一组变量,根据需求定义布尔表达式,找出满足布尔表达式的元组。布尔表达式从原子公式开始,再利用逻辑连接符构成更复杂,更大的公式。
-
域关系演算中的原子公式
- <x1,x2,…,xn> ∈ Rname
- x op y : op 就是>,<,=,大于等于,小于等于,≠
- x op 常量
- 公式的定义
- 一个原子公式p
- 否定p,p^q,pvq,其中p和q都是公式
- 存在x(p(x)),公式p内的x是free的,那么就是一个公式
- 所有任意x(p(x)),其中公式p内的x是free的,那么就是一个公式
- 例子
- 查找水手表里级别大于7的
- {<I,N,T,A>|<I,N,T,A> ∈Sailors ^ T>7}
- I,N,T,A四个变量表示是一个水手元组,要求该元组要在水手表内,且T变量的值大于7,其中T就是级别这个属性
- 查找水手表里级别大于7的
-
-
安全查询问题
- 满足公式的结果可能会无限多,那么这个查询就是不安全的
-
表达问题
-
关系代数与关系演算的表达能力等价,只是考虑问题的角度和表达方式不同(一个过程化,一个非过程化)
-
SQL语言的表达能力也与关系代数与关系演算等价
-
-
传统数据模型评价
-
传统数据模型
- 层次模型
- 网状模型
- 网状模型
-
共同特点与不足
-
都适用于OLTP(联机事物处理)应用
- OLTP:以记录为基础,基于结构化数据,不能很好的面向用户和应用
- 不能用很自然的方法表达现实世界的模型,表达能力有限
- 模型本身缺乏语义信息(一大堆表)
- 支持的数据类型少,难以满足需求应用需求
-
-
-
ER数据模型
-
术语概念
- 实体:把现实世界中可区别可区分的都表达为实体,一个实体由一组属性描述
- 实体集:所有相似实体的集合。
- 一个实体集内所有实体有同样的属性
- 每一个实体有一个键
- 每一个属性有一个域
- 允许有复合类型属性、允许有多值属性
- 联系:
- 现实世界中两个或多个实体间的关系就叫做联系
- 联系也可以有属性
- 联系集
- 所有同类联系组成的集就是联系集
- 一个联系集合是n个实体之间的n元关系
- 同一个实体集可以参与不同的联系,或者当不同的角色
-
-
ER图
-
语义约束
-
奇数比约束
- 可以有1对多,多对1,1对1,多对多
-
参与度约束
- 可以设置某一个实体参与一个联系的最小和最大次数
-
-
扩展的ER模型
-
概念
-
扩展的ER模型
- 不能单独存在
- 相当于职工和职工家属,职工家属就是弱实体
- 不能单独存在
- 普遍化与特殊化
- 与面向对象中的子类与父类的继承相似
- 学生与研究生
- 聚集
- 允许把两个实体集间的联系看出一个实体集,让这个实体集和别的实体集间建立联系
- 范畴
- 一个集合内的实体是由不同类型的实体构成
-
-
-
面向对象数据模型
-
突破了一范式的限制
-
来自于面向对象的分析和设计
-
对象关系数据系统
-
突破了一范式的限制
-
-