曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

2022-11-22 18:05阅读: 128评论: 0推荐: 0

Lecture#01 关系模型与关系代数

课程大纲

  1. 关系数据库概念
  2. 数据库的存储
  3. 数据库的查询
  4. 数据库的并发控制,事务管理,遇到冲突或需要重启系统时如何恢复数据库
  5. 更高级的内容——分布式数据库,其他类型的数据库,关系型数据库的扩展

项目

如何构建一个用于评测的面向磁盘的数据库系统

面向磁盘:假设数据库在磁盘上,然后将数据写到磁盘上

Lecture#01 关系模型与关系代数

1 数据库

  1. 数据库 DB:一个有组织的相互关联的数据的集合,它对现实世界的某些方面进行建模。

  2. 数据库存储为由DBMS管理的CSV文件,其中的每个实体都存储在它自己的文件中,应用程序必须在每次读取或更新记录时解析这些文件。每个实体都有自己的一组属性,故在每个文件中,不同记录由新行分隔,记录中的每个相应属性由逗号分隔

    🌰 数字音乐商店中有两个文件:一个用于存储作者,一个用于存储专辑。作者的属性有姓名、年份、国家,专辑的属性有名称、作者、发行年份。

    image-20210804212346002

在应用程序中编写解析文件的代码会出现以下问题,因此我们需要使用数据库管理系统对数据进行管理:

  • 数据完整性

    1. 我们怎么保证每个专辑中作者都存储在相同位置
    2. 如果有人把专辑中的年份改成一个字符串了怎么办,软件读取时就会报错
    3. 如果一个专辑有多个作者该如何存储
  • 实现

    1. 如何找到某条特定的记录(如果我们文件中有亿万以上的记录,通过遍历查询不现实)
    2. 假设我们的程序使用python开发查询数据库,但我想使用另一种语言创建一个使用此数据库的新程序,则需重复写新代码解析文件逻辑(重复造轮子)
    3. 如果同时有两个线程试图写入同一个文件怎么办
  • 数据安全

    1. 若打开文件更新记录时,在结束更新前,机器或程序出现故障怎么办
    2. 我对当前运行数据库的机器不能完全信任(因为可能发生宕机等生产事故),因此我怎样将数据库文件复制到两台不同机器上

2 DBMS

  1. 数据库管理系统 DBMS:管理数据库的专业软件。由一个相互关联的数据的集合和一组用以定义、创建、查询、更新及管理这些数据的程序组成。

    • 允许程序在无须关心底层实现的情况下,对数据库中的信息进行存储和分析。
    • 是一种能被多种应用所复用的软件,故无需重复造轮子。
  2. 早期的DBMS:

    数据库应用程序很难构建和维护,因为逻辑层和物理层之间存在紧密耦合。逻辑层是数据库拥有哪些实体和属性,而物理层是存储这些实体和属性的方式(数据结构)。在早期,物理层是在应用程序代码中定义的,所以如果我们想更改应用程序使用的物理层,我们必须更改所有代码以匹配新的物理层。(人们会一次次地因为一个改变而对代码进行重构

3 关系模型

Ted Codd 注意到人们每次想要更改物理层时都要重写DBMS,所以在1970年,他提出了关系模型来避免这种情况。这个关系模型有三个关键点:

  • 将所有的表存储在数据库中以建立关系。(以关系存储数据库)
  • 通过高级语言访问数据。(只说想要某些数据,没有说明要如何获取)
  • 逻辑层与物理层分开。

对于第二点:就像汇编语言和高级语言一样,高级语言只说明想要达到的效果,通过编译器编译成机器码实现具体操作;同样的,我们在关系模型中只说明需要什么数据,优化器会生成具体的查询方案

数据模型(model):描述数据库中数据的概念集合(如何组织数据)。关系模型是数据模型的一个例子。

  • Relational:大多数DBMS为关系型数据库
  • Key/Value、Graph、Document、Column-family:NoSQL数据库(列簇数据库如RocksDB)
  • Array/Matrix:Machine Learning会使用
  • Hierarchical:层次模型(不用了)
  • Network:网状模型(不用了)

模式(schema):使用给定数据模型时,对特定数据集合的描述。

关系数据模型包含三要素

  1. 关系结构:关系的定义及其内容。这是关系具有的属性和这些属性可以包含的值。
  2. 数据完整性约束:确保数据库内容满足约束条件。
  3. 操作:如何访问和修改数据库的内容。

4 数据操纵语言 DML

DML:表达数据库的查询和更新,使用户可访问/操纵那些按某种适当的数据模型组织起来的数据。

  1. 有以下访问类型

    • 检索数据库信息
    • 插入、删除、修改信息
  2. 有两种基本的数据操纵语言

    • 过程化 DML(如 Relational Algebra):要求用户指定需要什么数据及如何获取这些数据

    • 声明化 DML(非过程化 DML,如 Relational Calculus):只需用户指定需什么数据,无需指明如何获得

    • 查询:对信息进行检索的语句。DML中涉及信息检索的部分称为查询语言

      (实践中常把“查询语言”和“数据操纵语言”作为同义词,但这在技术上并不正确)

DDL 是对数据结构进行修改的语言,如加索引、建表等。

4 关系代数

Relational Algebra:定义了一些基本方法来从关系中获取或操作元组。

每种操作输入的是一个或多个关系,输出的是一个新的关系。

image-20210426200701903

自然连接:select * from r1 natural join r2;

笛卡尔积:select * from r1 cross join r2; 或 select * from r1,r2;

差和交运算能通过上述五种运算得到。

总结

数据库:相关联数据的集合。存储在 CSV 文件中,不同记录用新行分隔,记录的不同属性用逗号分隔。

  • 缺点:应用程序中编写代码解析文件会出现问题:数据完整性、遍历查记录慢、不同语言的应用程序解析文件需重复造轮子、多线程并发、数据安全问题。—— DBMS 产生

DBMS:相关联数据集合 + 操作程序。

  • 优点:可被多种应用程序复用,无需重复造轮子(程序无需关心底层实现,就能对数据进行存储和分析)
  • 缺点:早期 DBMS 的逻辑层(数据库的实体和属性)和物理(存储这些实体和属性的数据结构)层紧密耦合。人们每次想要更改物理层时都要重写代码来获取逻辑层所需数据。 —— Ted Codd 提出关系模型

关系模型:以关系存储数据库;通过高级语言访问数据;逻辑层和物理层解耦。

  • 关系模型三要素:数据结构、数据完整性约束、操作

数据模型 (model) 🆚 模式 (schema) :数据模型描述数据库如何组织数据 (Relational、Key/Value、Graph、Document、Column-family 等NoSQL、层次结构、网状结构);模式指在给定的数据模型下,对特定数据集合的描述。

数据库操纵语言 DML:过程化 DML —— 关系代数;声明化 DML —— SQL。

PS: 关系代数基于集合 (无序,无重复)。SQL基于包 (无序,允许重复)。

使用底层写法,会导致数据库物理层与逻辑层紧密耦合,则一旦物理层做出更改,就需重写代码来获取逻辑层所需数据。通过关系代数也需考虑查询优化问题(先选择后连接...)。如果通过SQL我们就只需考虑需要的数据,而不用说明如何获取它,随着时间推移,数据库可能产生改变,它能不断适应并改进。

image-20210805144324222

有价值的链接

别人的CMU 学习笔记 根据DBMS发展的脉络叙述,写的特别好。

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/16915999.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(128)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开