CMU-15-445-645-笔记-01-课程简介与关系模型

注: 本文首发我的 b 站专栏文章CMU 15-445/645-笔记-01-课程简介与关系模型

  • 课程目标

  • 参考书推荐用 《Database System Concepts》
  • 该课程主要是手写 Database Storage Manager 而不是 Database System(因为项目不支持 SQL 解析)
  • 数据库拓展研究

  • 用 CSV(Comma-Seperated Value)文件存 database

  • 怎么用呢,举个例子

  • 但这种方式是有问题的

    • 每个专辑的 entry 中的 artist 都是一样的么?
    • Ice Cube 没有拼写错误?
    • 如果别人在文件里重写了一个无效的 string 怎么办呢?
    • 如果一张专辑里面有多个 artist,那么怎么存储这些数据呢?
    • 如何查询数据?
    • 多线程同一时间写同一个文件怎么办?
    • 如何保证数据安全(在写数据的时候机器故障咋办?)
    • Database Management System 的作用

  • 1970 年 Ted Codd 提出的关系型模型(Relational Model)是为了解决之前数据库不断重构数据结构,以及数据结构转存之后不断销毁数据的问题

  • 关系模型三板斧如下
    • 用简单数据结构存数据
    • 用高级语言访问数据
    • 大型数据库的物理存储策略基于 Database Management System 的实现
  • 这种思想把 逻辑层 和 物理层 完全解耦
  • 关系型数据模型并不是唯一的数据模型

    比如如下

    • Relational(MySQL, PostgreSQL,Oracle,DB2,SQL server,SQLite)
    • Key/Value,Graph,Document, Column-family(NoSQL)
    • Array/Matrix(Mathine Learning)
    • Hierarchical,Network (Obsolete / Rare)旧时代的余晖。。。
  • 关系型模型可以对任何东西进行建模

  • 关系型模型主要关注三个方面

  • 一个 关系(relation) 是一个无序的集合,这个集合包含代表 entities 的属性的关系(relationship),比如

  • tuple 在 关系 中就是一个 属性值 的集合

  • 原始关系模型中,所有的值必须保证原子性或者它必须是一个单个属性值(比如只能是一个 String,一个 int,或者一个 float等,不能是数组或者嵌套的对象等)

  • NULL 这个属性值代表未知,SQL 查询会遇到麻烦
  • 主键 Primary Key,唯一标识记录的 id
  • 外键 Foreign Key,用于指定一张表中的属性必须存在于另一张表中
  • 注意 relation 和 table 语义一样
  • 一个外键的例子

  • 如何从 Database 中取数据?
    通过 DML (Data Manipulation Languages)

  • Relational Algebra 关系代数
  • Ted Codd 提出了在 Relational Algebra 中的其中基本运算符

    • SELECT

    • PROJECTION
      即 SELECT b_id-100, a_id FROM R WHERE a_id=’2’

    • UNION

    • INTERSECTION

    • DIFFERENCE

    • PRODUCT

    • JOIN
      即 SELECT * FROM R NATURAL JOIN S;

  • 一些后续研究的额外的操作符

  • 一些优化策略

  • 关系型模型与任何查询语言的实现无关,实际上当 Ted Codd 在他写关系型模型论文时并没有提出 SQL,他提出了 关系代数,并推出了自己的语言叫 Alpha,与(1970)同年推出的 SQL、Ingres (伯克利)、Quel 都是竞争对手。

  • SQL 只是一个标准

  • 结论