CMU15-445数据库系统:课程简介与关系模型

本文已收录于 CMU数据库系统学习笔记 系列,共计 11 篇,本篇是第 1 篇

视频课程(中字幕)、课件

数据库简介和关系模型:

https://www.bilibili.com/video/BV1f7411z7dw?p=1

https://www.bilibili.com/video/BV1f7411z7dw?p=2

https://www.bilibili.com/video/BV1f7411z7dw?p=3

https://www.bilibili.com/video/BV1f7411z7dw?p=4

课件:

 

课程简介与关系模型

15-415/615课程的核心是数据库管理系统的设计与实现。

本课程使用的教材:

课程组成:

课程实验:

在本学期的课程中,你将从头开始一点一点的构建自己的完整的数据库存储管理器,与清华大学操作系统课程实验一样,每个项目都建立在前一个项目的基础上。本课程实验需要你会C++语言,课程中不会教你如何编写/调试C++17。

注意:是构建出数据库存储器,而不是数据库系统,因为在这里面你无法运行SQL语句(会以物理运算符的形式将SQL语句翻译并进行查询,这些内容课程中会提供手写代码来执行查询),也没有查询解析器(有关查询解析器的内容可以从编译原理课程中了解)。就算这样,本课程也不仅仅是一个键值存储系统,这要比键值存储系统复杂得多。

CMU15-721课程是本课程的高级课程,里面的项目是基于本课程的项目的。

DBMS 和关系模型的提出

在关系模型提出之前都是直接基于物理模型。关系模型由Ted Codd在1960年中期发现。在当时用数据库工作的人在他们不停的开发应用程序时候会一次又一次的重写数据库实例,这是因为当时数据库的逻辑层和存储数据的物理层紧密耦合。

在当时你如果想在数据库中存储一些数据必须先告诉数据库系统是用哈希表还是树结构来存数据,然后数据库会根据你选的是哈希表还是树结构,给你提供完全不同的API,这一部分就属于物理层。

这些东西在现如今的应用程序开发中不会去考虑,已经完全解耦了,现如今不管什么存储结构,他们的API都是相同的。

Ted Codd 发现这个问题后,提出 DBMS 的抽象,称之为关系模型:

他想做的事情就是解耦,希望有一种统一的高级语言提供给应用程序的开发者。

  • 用简单的、统一的数据结构存储数据。
  • 如何存储这些关系取决于数据库系统的实现。
  • 关系模型不会去关心硬盘的布局和内存的组织。
  • 通过高级语言操作数据。
  • 逻辑层和物理层分离,系统开发者只关心逻辑层,而 DBMS 开发者才关心物理层。

好处是解耦,更换存储数据方式不用变动应用程序的代码(即逻辑层没有任何改动,物理层变动)。我们无需重写应用,依然可以使用SQL语言去访问这些关系。

当然,不止有关系模型这一种数据模型,还有:

  • Relational => 大部分 DBMS 属于关系模型,也是本课讨论的重点。因为关系模型可以对任何东西进行建模。
  • Key/Value => NoSQL(下同)
  • Graph
  • Document
  • Column-family
  • Array/Matrix => 机器学习所用的数据模型,使用数据保存矩阵
  • 层析数据模型 =>同时期关系模型诞生了,不需要去考虑他们。(下同)
  • 网络数据模型

关系模型包含三部分:数据结构、数据完整性约束、数据操作。(这里就可以去看Ipad上的思维导图了)

数据操作语言

在 关系模型 中从数据库中查询数据通常有两种方式:Procedural(过程化) 与 NonProcedural(非程序性 或者 声明式):

  • 过程化:查询命令需要指定执行时的具体查询策略,其中一个例子就是关系代数。
  • 声明式:关系演算。我们暂时不用去管他。如果你想深入了解查询优化可以看下关系演算,需使用微积分来推导出更高效的查询方案。对于这门课,我们只关心关系代数。查询命令只需要指定想要查询哪些数据,无需关心幕后的故事,如 SQL

关系代数(参考思维导图和笔记)

TedCodd提出了关系代数7种运算符。

这种关系代数基于集合,是无序的。将这些操作串联起来就能构建更复杂的操作。

有关于关系代数的内容可以参考思维导图 数据库原理课程思维导图分享 ,自行学习。也可以看这个视频课程:

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。