第二章 数据模型(data model)

2.1 层次数据模型

2.1.1 基本思路:

现实世界中很多事物之间本就存在层次关系,该模型尝试用树状结构描述这种关系。

2.1.2 基本概念:

记录record:现实世界一个实体(Entity)表示为一条记录;
域field:一个记录由若干域表示(属性??)
PCR(Parent-Child Relation):表达1:N关系

2.1.3 层次数据模式

一个层次模型由多个PCRs构成
每个PCR关系表示1:N关系
每个记录只有一个父节点

2.1.4 虚记录

解决问题:现实世界中常有非层次关系的数据,很难用PCR来表示。例如:

贡献:(1)引入指针,虚记录指向真实记录,避免数据冗余;(2)保持树状结构

2.2 网状数据模型

2.2.1 基本思路:

使用set(形如链表)表示现实世界中的1:N关系。一个记录可以为一个set的主记录,也可以为其他多个set的属记录。

2.2.2基本概念:

记录record:表示现实实体
data item:一个记录由若干item表示。与域相似,但域/属性必须是原子的,item可以是向量(复合类型)。
LINK记录类型:可以表示自连接关系、M:N关系、多元关系

e.g.:

【例1】定义LINK记录为员工的“替身”
员工(雇主)与LINK记录类型系型为1:1的系s1;
LINK记录类型与员工(雇员)建立系型为1:N的系s2。
使用s1、s2可以表示员工集合中的实体与实体间的自连接

【例2】表示M:N关系。定义LINK记录为学生-课程匹配“替身”(实际并包含如图所示信息)

使用LINK记录将M:N分解成1:N关系。

注:由于LINK并不包含如上图所示信息,在查询“学生S1选了哪些课程”时,遍历链表LS1:第一条记录L1,在链表LC1上遍历直至找到C1;第二条记录L2,在链表LC2上遍历直至找到C2。
而不能在遍历LS1找到L1时直接确定C1。

2.3 关系数据模型

2.3.1相比于层次、网状的区别:

1.使用表作为数据结构,具有更高的抽象级别,屏蔽了计算机底层实现的细节(树、链表、指针)。
2.概念简单易于理解。建立新的代数系统——关系代数,使用数学中集合论方法研究数据库模型。
3.定义非过程化的查询语言SQL。(层次:遍历树、网状:遍历链表)。
4.软连接:关系型数据库中表达实体间联系的方法。(层次、网状数据库中的连接称为硬连接)

e.g.:关系型数据库处理多对多关系时,重建一张表。实现了实体间的联系,但没有用到指针。

2.3.2 基本术语和概念:

属性attribute:一个列称为一个属性。(每一个属性必须是原子的)
域domain:每一个属性的取值范围。
关系relation:一个表。现实中的一个实体,实体间的联系,在数据库中用关系表达。
元组tuple:表中的一行(一个关系的实例是m个元组的集合)。
主键primary key

候选键candidate key:满足:①这个关系中任意两个元组这组属性的值都不同;②这组属性的任意一个子集没有特性①。
超键super key:只满足①。
候选键可能有多个,可以人工选择一个作为主键primary key,其余的称之为候补键alternate key
如果主键由关系中所有属性组成,则主键称之为全键all key

外键foreign key:一张表中,有一组属性用来引用另一张表内的元组,且该组属性必须是另一张表的主键。

完整性约束

引用完整性约束:外键指向的不能为空,(即外键必须指向一个元组)
域完整性约束:每条元组每个属性的值必须符合域的范围。
实体完整性约束:主键不允许为空。

2.3.3 关系代数

2.3.3.1 基本操作

并(∪\cup∪):在关系1和关系2中的元组。

并、交、差操作需要两个关系满足 并兼容条件:两个关系模式相同。

差(−-−):在关系1且不在关系2中的元组。
笛卡尔积(×\times×):关系1和关系2中所有元组集合的拼接。

e.g.:假设集合A={a, b},集合B={0, 1, 2},
两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

选择Selection(σ\sigmaσ):从关系中选择出符合条件的元组。
投影Projection(π\piπ):从关系中选择出某些列。

注:投影后可能导致出现所有属性列完全重复的行,投影自动去掉重复行

2.3.3.2 其他操作

连接Join:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。

  • 条件连接Condition Join/θ\thetaθ连接:R⋈θ=σθ(R×S)R\Join_\theta=\sigma_\theta(R\times S)R⋈θ​=σθ​(R×S)。从两个关系中分别选择属性a、b,选取a、b满足关系θ\thetaθ(可以为>、<、=>、<、=>、<、=等等)的元组。
  • 等值连接Equi Join:R⋈S1.sid<R1.sidSR\Join_{S1.sid<R1.sid}SR⋈S1.sid<R1.sid​S。θ\thetaθ为=的条件连接,是一种特殊的条件连接。
  • 自然连接Natrual Join:两个关系中比较的分量是相同的属性组,并在结果中去掉重复的属性列。是一种特殊的等值连接。

除Division:在关系A中所有与关系B中每一条元组都有联系的关系A中的元组。且结果的每一元组由关系A中有而B中没有的属性列组成。

除法可用基本操作表示为:π供应商(A)−π供应商(π供应商(A)×B−A)\pi_{供应商}(A)-\pi_{供应商}(\pi_{供应商}(A)\times B-A)π供应商​(A)−π供应商​(π供应商​(A)×B−A)

外连接Outer Joins:将自然连接中不匹配的元组保留下来。

  • 左外连接:S1∗⋈R1S1^*\Join R1S1∗⋈R1。连接运算符左边的元组全部保留,找不到匹配的依然保留,在右边补空值。
  • 右外连接:S1⋈∗R1S1\Join^*R1S1⋈∗R1。右边元组全部保留,左侧不匹配的补空值。
  • 全外连接:S1∗⋈∗R1S1^*\Join^*R1S1∗⋈∗R1。能连接的全部连接,左右找不到的元组依然保留,不匹配的地方补空值。

外并Outer Union:不满足并兼容条件的关系强行并。结果的模式与×\times×相同,两种关系中缺失的属性都补零。

2.3.4 关系演算

关系演算以谓词逻辑为基础,是一种非过程化表达。
元组关系演算
域关系演算

2.1-2.3 传统数据模型的评价

优点:适用于OLTP应用,擅长表达以记录为主的结构型数据。
缺点:无法自然地表达实体之间的联系;缺乏语义信息;数据类型少,难以满足应用需求。

2.4 ER数据模型

2.4.1 基本概念

实体Entity:现实世界中可区分的事物都表达为实体。在DB中用一组属性来描述。
联系Relation:两个或多个实体间的关系。联系也可以有属性。
实体集:相似实体的集合。一个实体集中所有实体具有相同的属性集。

每个实体集都有一个key
每个属性都有一个域
允许存在组合或多值属性

联系集:相似关系的集合。

一个n元关系集R关联n个实体;R中每个关系都与n个实体有关
同一实体集可以参与不同的关系集,或同一关系集不同角色

2.4.2 扩展的ER模型

弱实体Weaky entity:不能单独存在。

e.g.:职工 & 职工家属。职工家属是弱实体,不能单独存在。

特殊化与普遍化:类似于面向对象中的继承。

e.g.:学生 & 研究生

聚集Aggregation:允许联系(将联系视为实体)与别的实体再建立联系。

e.g.:医院-医生 & 患者。
医院与医生关联作为一个实体,该实体与患者关联。现实世界中,患者求医永远不会只访问医院或只访问医生,而是同时访问两者。

范畴Category:一个实体集可以包含不同类型的实体。

e.g.:银行账户:包含企业账户、个人账户

2.5 面向对象数据模型

突破了一范式的限制。

2.6 其他数据模型

基于逻辑的数据模型:目的:①扩展DBMS查询能力(e.g.递归查询);②:提升DBMS推理能力(得到在数据库中不直接存储的信息)。e.g.演绎数据库
时态数据模型:在一般模型基础上扩展描述时态信息的机制。
空间数据模型
XML数据模型

2.7 总结

1.每个DBMS系统必须实现某中数据模型。/数据模型是DBMS的核心。
2.数据模型是一种在数据库中模拟现实世界的方法。

参考:

【合集】数据库原理及应用 东南大学 徐立臻 共72讲
数据结构-网状模型

数据库原理及应用(东南大学)笔记——第二章 数据模型相关推荐

  1. Web前端开发笔记——第二章 HTML语言 第四节 超链接标签

    目录 前言 一.超链接标签 (一)链接其它子网页 (二)链接其它站点 (三)虚拟超链接 二.从当前页面链接到指定位置 三.链接的访问情况 四.在新窗口中打开链接 例题 结语 前言 本节介绍超链接标签即 ...

  2. 【王道考研】操作系统 笔记 第二章上 进程调度

    本文内容,1.进程和线程 2.进程调度 特此鸣谢王道考研 本文参考王道考研的相关课程 若有侵权请联系,立删 其余笔记链接: [王道考研]操作系统笔记 第一章_才疏学浅743的博客-CSDN博客 [王道 ...

  3. [go学习笔记.第二章] 2.go语言的开发工具以及安装和配置SDK

    一.工具介绍: 1.Visual Studio Code 一个运行于Mac,Windows,和linux上的,默认提供Go语言的语法高亮的IED,可以安装Go语言插件,还可以支持智能提示,编译运行等功 ...

  4. java网络编程 个人笔记 第二章 流

    java网络编程 个人笔记 第二章 流 流 I/O介绍 java流式输入/输出原理 输入输出流分类 节点流和处理流 节点流的类型 处理流的类型 InputStream(输入流) InputStream ...

  5. 深入理解 C 指针阅读笔记 -- 第二章

    Chapter2.h #ifndef __CHAPTER_2_ #define __CHAPTER_2_/*<深入理解C指针>学习笔记 -- 第二章*//*内存泄露的两种形式1.忘记回收内 ...

  6. 《Go语言圣经》学习笔记 第二章 程序结构

    Go语言圣经学习笔记 第二章 程序结构 目录 命名 声明 变量 赋值 类型 包和文件 作用域 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记,几乎是书上的内 ...

  7. 《计算传播学导论》读书笔记——第二章文本分析简介

    <计算传播学导论>读书笔记--第二章文本分析简介 第一节 文本分析研究现状 常用文本挖掘技术 第二节 文本分析与传播学研究 (一)为什么文本挖掘技术逐渐受到传播学者的关注 (二)不同文本分 ...

  8. Computational Optimal Transport 笔记——第二章(2)

    Computational Optimal Transport 笔记--第二章(2) 符号说明 2. 理论基础 2.3 Kantorovich Relaxation SUM 2.4 Optimal T ...

  9. PhalAPI学习笔记 ——— 第二章接口服务请求

    PhalAPI学习笔记 --- 第二章接口服务请求 前言 接口服务请求 接口服务请求案例 自定义接口路由 开启匹配路由 配置路由规则 nginx apache 服务请求 结束语 前言 公司业务需要转学 ...

最新文章

  1. 【总结】DIV+CSS有可能遇到的问题
  2. linux上的项目可以在windows,新建的django项目,在linux系统可以跑,在windows上跑老是报错...
  3. linux修改磁盘盘符,debian下修改磁盘阵列盘符
  4. SAP Spartacus里解析route参数的逻辑
  5. Golang 检查元素在slice中是否存在 模仿Php实现arrary_In
  6. chrome浏览器开发者工具F12中某网站的sources下的源码如何批量保存?
  7. 《机器学习实战》学习总结(六)PCA算法原理
  8. IDEA中导入Mysql驱动包
  9. Hybrid APP介绍
  10. Android Studio的适配器Adapter以及Adapterview的使用
  11. 信息系统项目管理师——进度管理论文
  12. FEMTransfer软件实现Patran/Nastran/Abaqus/Ansys/Sesam(Genie)/Workbench/Femap/盈建科/PKPM仿真分析软件的有限元模型相互转换导入
  13. COMSOL 固体力学 第一主应力、第二主应力、第三主应力、径向应力、环向应力、切向应力 截面一维曲线
  14. RT-Thread学习笔记【ADC与DAC设备】
  15. wfp网络过滤框架总结(一)
  16. AD域内禁用所有计算机445端口,勒索病毒“永恒之蓝”变种再来,该如何关闭445端口(收藏)(示例代码)...
  17. oracle-ORA的原理
  18. 使用Auto.js庖丁对Pro Snapshot快照加密的解密打包教程
  19. leetcode 栈739. 每日温度
  20. 【开发常用工具】MAC(M1)下安装Windows虚拟机

热门文章

  1. backtrader回测框架实例
  2. c语言编程模拟选举,C语言编程题精选
  3. 如何查看linux进程?
  4. javaSE简单介绍
  5. 序列化器serializers的使用
  6. xml中foreach循环
  7. Windows CMD命令添加开机启动项
  8. python装饰器带参数函数二阶导数公式_SICP Python 描述 1.6 高阶函数
  9. 3.vue开发实例演示
  10. HttpClient Get请求带参数