MIT 6.830 Lecture Notes

MIT 6.830是一门数据库系统的课程,实现语言为Java,课程主页可点击此处

这个系列的文章主要记录学习6.830课程的笔记心得。


Lecture 1

Basic Concepts

  • Data modeling & layout 数据模型
    • 结构化表示数据的系统方法
    • 对于数据的持久性、一致性、共享和访问效率很重要
  • Declarative Querying and Query Processing 查询
    • 访问数据的一种高级语言

Consistency/Transaction + Concurrency Control

  • Atomicity 原子性:某操作要么完成要么不做,不存在做了部分的情况
  • Consistency 一致性:事务的操作前后不影响数据的完整性
  • Isolation 隔离性:并发访问时,事务之间不会互相影响
  • Durability 持久性:事务完成后,其所做的修改将持久地保留在数据库中

Lecture 2

Those who cannot remember the past are condemned to repeat it

Relational Data Model

  • Key properties
    • 表示形式简单
    • 不需要物理数据模型描述
  • The Data Model
    • 所有数据表示为元组的表
    • 表是无序集,无重复元组
    • 数据库由一个或多个表构成
    • 每个关系都有一个schema来描述列/字段类型
    • 每个字段都是基础数据类型
  • Keys
    • 主键是唯一标识一条记录的字段属性,每个表有且仅有一个主键,必须非空
    • 外键用来建立表与表之间的联系,表A的外键是表B的主键,外键可重复可空,一个表可有多个外键

Lecture 3

SQL

  • Left Join:返回左表所有记录和右表中连接字段相等的记录
  • Right Join:返回右表所有记录和左表中连接字段相等的记录
  • Inner Join:只返回两个表中连接字段相等的记录
  • Outer Join:返回两个表中所有记录

SimpleDB

  • SimpleDB主要组成部分

    • Heap Files (Lab1)

    • Buffer Pool (Lab 1-6)

      • Basic Operators (Lab 1 & 2)
        • Scan, Filter, JOIN, Aggregate
    • Query Optimizer (Lab 3)

    • Transactions (Lab 4)

    • B-Tree Indexs (Lab 5)

    • Recovery (Lab 6)

  • 模型图

    DB Module Diagram
    • DB -> Catalog:DB调用getCatalog()方法,后者返回一个列表,包含了DB所有的表
    • DB -> BufferPool:DB调用getBufferPool()方法,后者返回所缓存的最近访问的页
    • Catalog:<DbFileID, Table>,其中Table:{DbFile file, String name, String primary_key}
    • BufferPool:<PageID, Page>,其中Page:{PageID id, Tuple tuples[], Byte header[]}
    • HeapFile:{File file, TupleDesc td, DbFileIterator it},生成DbFile
    • HeapPage:{HeapPageId pid, TupleDesc td, Byte header[], Tuple tuples[]},生成Page
    • Operators:生成DbIterator

Lecture 4

Functional Dependency

  • 一个数据库R的一组FD可以表示成:X -> Y,其中X和Y是数据库R中的两组属性集合,其含义是:对于R中的任意两个元组,只要他们在集合X中的属性相等,那么他们在集合Y中的属性也相等。这里X称为决定因素,Y称为被决定因素
    • 完全函数依赖:在一张表中,若X -> Y,且对于X的任何一个真子集(假如属性组X包含超过一个属性的话),X’ -> Y不成立,那么Y对X是完全函数依赖
    • 部分函数依赖:假如Y函数依赖于 X,但同时Y并不完全函数依赖于X,那么Y部分函数依赖于X
    • 传递函数依赖:假设Z函数依赖于Y,Y函数依赖于X,同时Y不包含于X,且X不函数依赖于Y,则Z传递函数依赖于X

Key

设K为某表中的一个属性或属性组,若除K之外的所有属性都完全函数依赖于K,则K为一个码。(码可以不唯一,但主码唯一)码中包含的所有属性即都为主属性

Normal Form

  • 1NF:最基本的要求,每个属性都不可再分
  • 2NF:2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖
  • 3NF:3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖
  • BCNF:BCNF在3NF的基础之上,消除了主属性对于码的部分与传递函数依赖