Data Model
概念层模型
概念层模型是指抽象现实系统中有应用价值的元素及其关联关系,反映现实系统中的有应用价值的信息结构,并且不依赖于数据的组织层数据模型。
常用的概念层模型有实体-联系(Entity-Relationship, E-R)模型、语义对象模型。
实体-联系模型
在实体-联系模型中主要涉及三方面的内容:实体、属性和联系。
-
实体:实体是具有公告性质、并可相互区分的现实世界对象的集合,或者说是具有相同结构的对象的集合。
-
属性:每个实体都具有一定的特征或性质,这样我们才能根据实体的特征来区分一个个实例。属性就是描述实体或者联系的性质或特征的数据项。
-
联系:在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界反映为实体内部的联系和实体之间的联系。
两实体之间的联系通常有如下三种:
- 一对一联系
- 一对多联系
- 多对多联系
组织层数据模型
层次数据模型
基本思路
- 由于现实世界中很多事物之间本身就存在层次关系,层次数据模型尝试用树来描述这些。
基本概念
- 记录 record
- 把现实世界一个实体表达为一个记录
- 域 field
- 一个记录由若干个域来描述
- PCR(双亲子女关系):表达现实生活中一对多的关系
层次型数据库的数据模式
- 一个层次数据模型有多个PCR
- 每一个PCR表示一个1对多的关系
- 每一个记录类型只有一个父节点
虚记录
现有的PCR技术难以表示现实生活中下列类型的关系
- 现实生活中很多数据不是层次型,它难以用PCR表示
- 记录之间的多对多关系
- 一个记录类型可能有不止一个父节点
- 多元关系
引入虚记录
- 为了避免数据的冗余,且保持树状结构
- 引入指针,由虚记录指向相应的真实记录
网状数据模型
基本思路
- 网状模型的基本数据结构为set【系】,一个set表达现实世界中两个数据类型的一对多关系。其中一为主记录,多为属记录。在网状模型中,一个记录类型可以是多个类型的主记录,也可以是多个类型的属记录。
基本概念
- 突破了层次结构的限制,能更容易地表示非层次型数据
- 记录 record
- data items
- 与域相似,但它可以是向量
- set 表达两个记录类型的一对多关系
- 是一个链表
- Link记录类型
- 可以表示多对多关系
- 可以表示多元关系
- 类型内的自连接
- 用雇员【上司】与对应的link构成一个系s1
- link对雇员【手下】之间构成系s2
关系数据模型
基本思路
- 关系模型的基本数据结构是表,即关系。将现实生活中实体和实体之间的联系全部用表来表示。将表看出多个元组【记录】的集合,可以采用数学的研究方法进行研究。
特性
- 基于数学集合论,有更高的抽象级别
- 屏蔽了所有的底层细节,易于理解
- 可以建立新的代数系统----关系代数
- 定义一个非过程化的查询语言----SQL
- 非过程化,不需要程序员自己编写一步步的程序
- 软连接
- 一种逻辑指针
术语和概念
- 属性 Attributes
- 称为列
- 一个实体的多种方面的信息,称为属性
- 域 Domain
- 每一个属性有一定的取值范围,称为域,表内数据的要求
- 原子数据【不可再分】
- 允许属性的值为空值【空值为不知道,不是0也不是空串】
- 每一个属性有一定的取值范围,称为域,表内数据的要求
- 关系 Relation
- 简称为表
- 现实世界的实体和实体间的联系用关系表达
- 元组 Tuple
- 表内每一行称为元组
- 目
- 属性的数量
- 主键
- 候选键满足以下条件
- 这个关系内任意两条不同的元组这个属性的值都不一样【这组属性的值能够唯一的决定其它的值】
- 该组属性的任意一个子集没有这个特性
- 满足第一个而第二个不满足的话就称为超键
- 候选键可能有多个,可以指定其中一个为主键,其余的为候补键
- 如果主键是由该关系内所有属性组成,则称为全键
- 候选键满足以下条件
- 外键
- 在一个关系内,有一组属性用来引用另一张表内的元组,那么该外键应为另一张表的主键。
- 引用完整性:如果我们把外键看成是一个逻辑指针,那么该逻辑指针指向的不能为空【即没有】。
外键的例子
- 选课的表
- 学生的表
- 通过sid
完整性约束
- 通过外键的引用完整性约束
- 域完整性约束:元组内的每个属性的值都要在定义的域的范围内
- 实体完整性约束:一个关系里定义的一个主键,主键的值不能为空,如果主键为空就无法进行唯一性标识
例子
- 该例子会在后面提到的关系代数和关系演算中用到
- 水手和船的预订
例子中相关的表
-
R1 水手和船的预订关系表
-
sid 水手编号 bid 船编号 day 预定日期
-
sid bid day 22 101 10/10/96 58 103 11/12/96 -
S1 Saliors 水手信息表
-
sid 水手编号 sname 水手姓名 rateing 水手级别 age 水手年龄
-
sid sname rating age 22 dustin 7 45.0 31 lubber 8 55.5 58 rusty 10 35.0 -
B1 船信息表
-
bid 船的编号 bname 船的名字 color 船的颜色
-
bid bname color 101 tiger red 103 lion green 105 hero blue -
S2 Saliors 水手信息表
-
sid 水手编号 sname 水手姓名 rateing 水手级别 age 水手年龄
-
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
操作的具体例子和详细讲解
-
投影操作运算结果的模式就是投影的
- 定义上说:投影操作要消除重复元组
- 实际数据库系统并不主动删除重复元组,除非用户主动要求
-
选择操作就是从一个表中把满足条件的元组选出来
- 选择操作不会产生重复元组【只要原关系中没有重复元组】
- 选择操作的模式与原关系的模式相同
- 选择操作的结果可以作为别的代数关系的输入
-
集合的并、交、差
- 参与集合的两个关系要满足两个条件
- 属性个数相同
- 属性类型要一样
- 参与集合的两个关系要满足两个条件
-
笛卡尔乘积
- 结果模式包括进行操作的两个表的所有属性,两张表的每条元组之间两两拼接
-
条件连接操作
- 由笛卡尔乘积和选择操作的结合
- 结果模式和迪卡尔乘积的模式相同
- 连接操作的结果的元组数比笛卡尔乘积的结果元组要少
- 也称为theta-join
-
等值连接操作
- 一种特殊的条件连接,连接条件只有等值的条件
- 结果模式和笛卡尔乘积的模式类似,把等值的属性去掉一列
- 自然连接:两张表在所有的公共属性上做等值连接【应用开发最常用的】
-
Division 除法操作
- 不是一种必备的操作,但是它适合回答一些问题
- 比如:找出水手预定的所有船只
- 假设A有两种属性,x和y;B只有一种属性y:
- 也可能x和y是一个集合
- A/B = {<x>|ョ<x,y>∈A,∀<y>∈B}
- 计算思路:比如对于A/B来说,我们要找在关系A中跟关系B中所有y值都有联系的x值。【也就是找出在关系B中没有一个y值与A的是没有联系的。否定的否定】
- 先在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}
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的,那么就是一个公式
- 如果在一个域变量内使用了存在量词或全称量词,那么就是被绑定了,没有被绑定就是free的。
- 域关系演算中的原子公式
域关系演算例子
- 查找水手表里级别大于7的
- {<I,N,T,A>|<I,N,T,A> ∈Sailors ^ T>7}
- I,N,T,A四个变量表示是一个水手元组,要求该元组要在水手表内,且T变量的值大于7,其中T就是级别这个属性
- 找出一个水手的年龄大于18,级别小于9,且名字叫做joe
- {<I,N,T,A>|<I,N,T,A> ∈Sailors ^ T<9 ^ A=‘Joe’ ^ A>18 }
安全查询问题
- 满足公式的结果可能会无限多,那么这个查询就是不安全的
表达能力
-
关系代数与关系演算的表达能力等价,只是考虑问题的角度和表达方式不同
-
SQL语言的表达能力也与关系代数与关系演算等价
传统数据模型评价
传统数据模型
- 层次模型
- 网状模型
- 关系模型
共同特点与不足
- 都适用于OLTP【联机事物处理】应用
- OLTP:以记录为基础,基于结构化数据,不能很好的面向用户和应用
- 不能用很自然的方法表达现实世界的模型,表达能力有限
- 模型本身缺乏语义信息
- 支持的数据类型少,难以满足需求应用需求
ER数据模型
术语和概念
- 实体:把现实世界中可区别可区分的都表达为实体,一个实体由一组属性描述
- 实体集:所有相似实体的集合。
- 一个实体集内所有实体有同样的实体
- 每一个实体有一个键
- 每一个属性有一个域
- 允许有复合类型属性、允许有多值属性
- 联系:
- 现实世界中两个或多个实体间的关系就叫做联系
- 联系也可以有属性
- 联系集:
- 所有同类联系组成的集就是联系集
- 一个联系集合是n个实体之间的n元关系
- 同一个实体集可以参与不同的联系,或者当不同的角色
- ER模型的语义信息比传统的更多
ER图
语义约束
奇数比约束
- 可以有1对多,多对一,1对1,多对多
参与度约束
- 可以设置某一个实体参与一个联系的最小和最大次数。
扩展的ER模型
相关概念
- 弱实体
- 不能单独存在,相当于职工和职工家属,职工家属就是弱实体
- 普遍化与特殊化
- 与面向对象中的子类与父类的继承相似
- 学生与研究生
- 聚集
- 允许把两个实体集间的联系看出一个实体集,让这个实体集和别的实体集间建立联系
- 范畴
- 一个集合内的实体是由不同类型的实体构成
- 举例
- 银行账户有企业账户、私人账户
在数据库设计中,“total participation”(全参与性)是一种关于弱实体的概念。弱实体通常是指那些没有足够属性来唯一标识自己的实体,它们通常依赖于与之相关联的强实体来进行标识。“Total participation” 意味着弱实体的每个实例都必须与某个相关的强实体实例相关联,而不允许存在孤立的弱实体实例。
这个概念通常在实体关系模型(Entity-Relationship Model)中使用,以规定弱实体与强实体之间的联系。在ER图中,“total participation” 通常用一个双线表示,连接弱实体和强实体的关系线中会显示这种全参与性。这意味着,如果强实体A与弱实体B之间存在全参与性关系,那么每个强实体A的实例都必须与至少一个弱实体B的实例相关联,否则将违反数据库的完整性约束。
举例来说,考虑一个图书馆数据库,其中图书是一个强实体,而书本副本(每本书的不同副本)是一个弱实体,每个书本副本都必须与特定的图书相关联,这种情况下就存在了"total participation"。这可以确保每个书本副本都有一个关联的图书,防止孤立的书本副本存在。
弱实体(Weak Entity)并不是一个关系(relationship),而是数据库中的一种实体。与强实体(Strong Entity)相对,弱实体没有足够的属性来唯一标识自己。它通常依赖于与之相关联的一个或多个属性,以及与之相关联的强实体,以便唯一标识它自己。
弱实体通常用于表示数据库中某些特定情况,例如,数据库中可能有一个强实体“顾客”(Customer),而“订单”(Order)可能被视为一个弱实体,因为订单本身可能无法唯一标识。订单可能需要依赖于顾客以及其他属性(如订单日期)来唯一标识。弱实体通常与关系数据库中的关系(relationship)一起使用,以建立与强实体的联系。
总之,弱实体是数据库中的一种实体,不是关系,而是依赖于强实体和其他属性来唯一标识自己的实体。
面向对象数据模型
-
突破了一范式的限制
-
来自于面向对象的分析和设计
-
对象关系数据系统
- 在原有关系数据模型中有了抽象模型,突破了一范式的限制
别的数据模型
-
基于逻辑的数据模型
- 扩展DBMS的推理能力
-
时态数据模型
- 能有效的管理事态信息
-
空间数据模型
- 能表达一些空间物体之间的关系
-
XML数据模型
- 网络存储
-
别的
总结
- 数据模型是DBMS的核心
思考
- 有什么更好的可以替代关系模型的数据模型?