数据库原理及应用系列笔记之数据模型

Data Model

层次数据模型

基本思路

  • 由于现实世界中很多事物之间本身就存在层次关系,层次数据模型尝试用树来描述这些。

基本概念

  • 记录 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值
  • 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模型

相关概念
  • 弱实体
    • 不能单独存在,相当于职工和职工家属,职工家属就是弱实体
  • 普遍化与特殊化
    • 与面向对象中的子类与父类的继承相似
    • 学生与研究生
  • 聚集
    • 允许把两个实体集间的联系看出一个实体集,让这个实体集和别的实体集间建立联系
  • 范畴
    • 一个集合内的实体是由不同类型的实体构成
    • 举例
      • 银行账户有企业账户、私人账户

面向对象数据模型

  • 突破了一范式的限制

  • 来自于面向对象的分析和设计

  • 对象关系数据系统

    • 在原有关系数据模型中有了抽象模型,突破了一范式的限制

别的数据模型

  • 基于逻辑的数据模型

    • 扩展DBMS的推理能力
  • 时态数据模型

    • 能有效的管理事态信息
  • 空间数据模型

    • 能表达一些空间物体之间的关系
  • XML数据模型

    • 网络存储
  • 别的

总结

  • 数据模型是DBMS的核心

思考

  • 有什么更好的可以替代关系模型的数据模型?
发布了28 篇原创文章 · 获赞 1 · 访问量 1724

猜你喜欢

转载自blog.csdn.net/doordiev/article/details/104640874