第二单元: 数据库原理及应用------数据模型

本文详细介绍了数据模型的发展历程,重点讲解了层次模型、网状模型和关系模型的思路、特性及术语。层次模型基于树形结构,网状模型则允许更灵活的关系表示,而关系模型以其简洁的表形式和强大的SQL查询语言成为主流。此外,还探讨了完整性约束、关系代数和关系演算,以及传统数据模型的评价和ER模型的语义约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

最早出现层次和网状数据模型

层次模型

网状数据模型

关系数据模型

思路

特性

术语和概念

属性(Attribute)

域(Domain)

关系 Relation

元组(Tuple)

主键

外键

完整性约束

下面会用到的例子

关系代数

基本操作

关系演算

基本思路

TRC 元组关系演算

DRC 域关系演算

安全查询问题

表达问题

传统数据模型评价

传统数据模型

共同特点与不足

ER数据模型

术语概念

ER图

语义约束

奇数比约束

参与度约束

扩展的ER模型

概念

面向对象数据模型


最早出现层次和网状数据模型

  • 层次模型

    • 思路
      • tree数据结构表示现实世界
    • 概念
      • 记录(record)
        • 把现实世界一个实体表达为一个记录
      • 域(field)
        • 一个记录由若干个域来描述
      • 双亲子女关系(PCR)
        • 两个不同关系记录之间存在一对多的关系
        • 表达现实生活中一对多的关系
        • 例子:院系是一个记录类型,班级是一个记录类型,一个系下面有多个班(形的定义)
    • 层次型数据库的数据模式

      • 一个层次数据模型有多个PCR
      • 每一个PCR表示一个1对多的关系
      • 每个记录类型只能有一个双亲
    • 虚记录
      • 一对多能解决,多对多怎么解决
      • 引入虚记录
        • 避免数据的冗余,维持PCR的树形结构
          • 引入指针,由虚记录指向相应的真实记录
  • 网状数据模型

    • 思路
      • 数据结构系(set),现实世界中两个记录类型之间一个一对多的关系,一是主记录,多是属记录。一个记录类型可以是多个类型的主记录,也可以是多个类型的属记录。
    • 概念
      • 突破了层次结构的限制,能更容易地表示非层次型数据
      • 记录(record)
      • 数据项data items
        • 与域相似,但它可以是向量
      • set 表达两个记录类型的一对多关系
        • 链表
      • Link记录类型
        • 可以表示多对多关系
        • 可以表示多元关系
        • 类型内的自连接
          • 用雇员  (下属)  与对应的link构成一个系s1
          • link对雇员  (下属)  之间构成系s2
  • 关系数据模型

    • 思路

      • 表(relation).将现实生活中实体和实体之间的联系全部用表来表示,可以采用数学的研究方法进行研究
    • 特性

      • 基于数学集合论,有更高的抽象级别(树,链表,指针...都被屏蔽)
      • 屏蔽了所有的底层细节,易于理解(表)
      • 可以建立新的代数系统----关系代数
      • 定义一个非过程化的查询语言----SQL
        • 非过程化语言,不需要程序员自己编写一步步的程序
      • 软连接
        • 一种逻辑指针(把某个值看作地址)
    • 术语和概念

      • 属性(Attribute)

        • 一个实体的多种方面的信息,称为属性
      • 域(Domain)

        • 每一个属性有一定的取值范围,称为域,表内数据的要求
        • 原子数据(不可再分) 表不可以套娃
        • 允许属性的值为空值, 空值为不知道,不是0也不是空串
      • 关系 Relation

        • 现实世界的实体和实体间的联系用关系表达(一个关系或多个关系)
        • 关系是由多个属性构造
      • 元组(Tuple)

        • 表内每一行称为元组
        • 属性的数量
      • 主键

        • 满足两个条件
          • 这组属性的值能够唯一的决定其它的值,这个关系内任意两条不同的元组这个属性的值都不一样
          • 该组属性的任意一个子集没有这个特性
          • 例子:学生的学号主键
        • 满足第一个而第二个不满足的话就称为超键
          • 学号+姓名就是超键
        • 候选键可能有多个,可以指定其中一个为主键,其余的为候补键
        • 如果主键是由该关系内所有属性组成,则称为全键
      • 外键

        • 在一个关系内,有一组属性用来引用另一张表内的元组,那么该外键应为另一张表的主键。
        • 引用完整性:如果我们把外键看成是一个逻辑指针,那么该逻辑指针指向的不能为空(即没有)。
  • 完整性约束

    • 通过外键的引用完整性约束
    • 域完整性约束:元组内的每个属性的值都要在定义的域的范围内
    • 实体完整性约束:一个关系里定义的一个主键,主键的值不能为空,如果主键为空就无法进行唯一性标识
  • 下面会用到的例子

sidbidday
2210110/10/96
5810311/12/96

sidsnameratingage
22dustin745.0
31lubber855.5
58rusty1035.0

bidbnamecolor
101tigerred
103liongreen
105heroblue

sidsnameratingage
28yuppy935.0
31lubber855.5
44guppy535.0
58rusty1035.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值
      • 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的,那么就是一个公式
    • 例子
      • 查找水手表里级别大于7的
        • {<I,N,T,A>|<I,N,T,A> ∈Sailors ^ T>7}
        • I,N,T,A四个变量表示是一个水手元组,要求该元组要在水手表内,且T变量的值大于7,其中T就是级别这个属性
  • 安全查询问题

    • 满足公式的结果可能会无限多,那么这个查询就是不安全的
  • 表达问题

    • 关系代数与关系演算的表达能力等价,只是考虑问题的角度和表达方式不同(一个过程化,一个非过程化)

    • SQL语言的表达能力也与关系代数与关系演算等价

  • 传统数据模型评价

    • 传统数据模型

      • 层次模型
      • 网状模型
      • 网状模型
    • 共同特点与不足

      • 都适用于OLTP(联机事物处理)应用

        • OLTP:以记录为基础,基于结构化数据,不能很好的面向用户和应用
      • 不能用很自然的方法表达现实世界的模型,表达能力有限
      • 模型本身缺乏语义信息(一大堆表)
      • 支持的数据类型少,难以满足需求应用需求
  • ER数据模型

    • 术语概念

      • 实体:把现实世界中可区别可区分的都表达为实体,一个实体由一组属性描述
      • 实体集:所有相似实体的集合。
        • 一个实体集内所有实体有同样的属性
        • 每一个实体有一个键
        • 每一个属性有一个域
        • 允许有复合类型属性、允许有多值属性
      • 联系:
        • 现实世界中两个或多个实体间的关系就叫做联系
        • 联系也可以有属性
      • 联系集
        • 所有同类联系组成的集就是联系集
        • 一个联系集合是n个实体之间的n元关系
        • 同一个实体集可以参与不同的联系,或者当不同的角色
  • ER图

    • 语义约束

    • 奇数比约束

      • 可以有1对多,多对1,1对1,多对多
    • 参与度约束

      • 可以设置某一个实体参与一个联系的最小和最大次数
  • 扩展的ER模型

    • 概念

      • 扩展的ER模型

        • 不能单独存在
          • 相当于职工和职工家属,职工家属就是弱实体
      • 普遍化与特殊化
        • 与面向对象中的子类与父类的继承相似
        • 学生与研究生
      • 聚集
        • 允许把两个实体集间的联系看出一个实体集,让这个实体集和别的实体集间建立联系
      • 范畴
        • 一个集合内的实体是由不同类型的实体构成
  • 面向对象数据模型

    • 突破了一范式的限制

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

    • 对象关系数据系统

      • 突破了一范式的限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值