数据库原理之数据模型Data Model

本文详细介绍了数据模型的各种类型,包括实体-联系模型、层次模型、网状模型、关系模型、弱实体、面向对象数据模型以及逻辑、时态和空间数据模型。讨论了它们的原理、应用场景和优缺点,以及面向更高层次数据管理的需求和挑战。
摘要由CSDN通过智能技术生成

Data Model

概念层模型

概念层模型是指抽象现实系统中有应用价值的元素及其关联关系,反映现实系统中的有应用价值的信息结构,并且不依赖于数据的组织层数据模型。

常用的概念层模型有实体-联系(Entity-Relationship, E-R)模型、语义对象模型。

实体-联系模型

在实体-联系模型中主要涉及三方面的内容:实体、属性和联系。

  1. 实体:实体是具有公告性质、并可相互区分的现实世界对象的集合,或者说是具有相同结构的对象的集合。

  2. 属性:每个实体都具有一定的特征或性质,这样我们才能根据实体的特征来区分一个个实例。属性就是描述实体或者联系的性质或特征的数据项。

  3. 联系:在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界反映为实体内部的联系和实体之间的联系。

两实体之间的联系通常有如下三种:

  1. 一对一联系
  2. 一对多联系
  3. 多对多联系

组织层数据模型

层次数据模型

基本思路
  • 由于现实世界中很多事物之间本身就存在层次关系,层次数据模型尝试用树来描述这些。
基本概念
  • 记录 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 预定日期

  • sidbidday
    2210110/10/96
    5810311/12/96
  • S1 Saliors 水手信息表

  • sid 水手编号 sname 水手姓名 rateing 水手级别 age 水手年龄

  • sidsnameratingage
    22dustin745.0
    31lubber855.5
    58rusty1035.0
  • B1 船信息表

  • bid 船的编号 bname 船的名字 color 船的颜色

  • bidbnamecolor
    101tigerred
    103liongreen
    105heroblue
  • S2 Saliors 水手信息表

  • sid 水手编号 sname 水手姓名 rateing 水手级别 age 水手年龄

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

在数据库设计中,“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的核心
思考
  • 有什么更好的可以替代关系模型的数据模型?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值