CMU 15-445/645-筆記-01-課程簡介與關(guān)系模型

- 課程目標(biāo)

- 參考書推薦用 《Database System Concepts》
- 該課程主要是手寫 Database Storage Manager 而不是 Database System(因?yàn)轫?xiàng)目不支持 SQL 解析)
- 數(shù)據(jù)庫拓展研究

- 用 CSV(Comma-Seperated Value)文件存 database
- 怎么用呢,舉個(gè)例子

- 但這種方式是有問題的
? ? - 每個(gè)專輯的 entry 中的 artist 都是一樣的么?
? ? - Ice Cube 沒有拼寫錯(cuò)誤?
? ? - 如果別人在文件里重寫了一個(gè)無效的 string 怎么辦呢?
? ? - 如果一張專輯里面有多個(gè) artist,那么怎么存儲(chǔ)這些數(shù)據(jù)呢?
? ? - 如何查詢數(shù)據(jù)?
? ? - 多線程同一時(shí)間寫同一個(gè)文件怎么辦?
? ? - 如何保證數(shù)據(jù)安全(在寫數(shù)據(jù)的時(shí)候機(jī)器故障咋辦?)
? ? - Database Management System 的作用
? ??

- 1970 年 Ted Codd 提出的關(guān)系型模型(Relational Model)是為了解決之前數(shù)據(jù)庫不斷重構(gòu)數(shù)據(jù)結(jié)構(gòu),以及數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)存之后不斷銷毀數(shù)據(jù)的問題
- 關(guān)系模型三板斧如下
? ? - 用簡單數(shù)據(jù)結(jié)構(gòu)存數(shù)據(jù)
? ? - 用高級語言訪問數(shù)據(jù)
? ? - 大型數(shù)據(jù)庫的物理存儲(chǔ)策略基于 Database Management System 的實(shí)現(xiàn)
- 這種思想把 邏輯層 和 物理層 完全解耦
- 關(guān)系型數(shù)據(jù)模型并不是唯一的數(shù)據(jù)模型

? ? 比如如下
? ??

? ? - Relational(MySQL, PostgreSQL,Oracle,DB2,SQL server,SQLite)
? ? - Key/Value,Graph,Document, Column-family(NoSQL)
? ? - Array/Matrix(Mathine Learning)
? ? - Hierarchical,Network (Obsolete / Rare)舊時(shí)代的余暉。。。
? ??
- 關(guān)系型模型可以對任何東西進(jìn)行建模
- 關(guān)系型模型主要關(guān)注三個(gè)方面

- 一個(gè) 關(guān)系(relation) 是一個(gè)無序的集合,這個(gè)集合包含代表 entities 的屬性的關(guān)系(relationship),比如

- tuple 在 關(guān)系 中就是一個(gè) 屬性值 的集合
- 原始關(guān)系模型中,所有的值必須保證原子性或者它必須是一個(gè)單個(gè)屬性值(比如只能是一個(gè) String,一個(gè) int,或者一個(gè) float等,不能是數(shù)組或者嵌套的對象等)
- NULL 這個(gè)屬性值代表未知,SQL 查詢會(huì)遇到麻煩
- 主鍵 Primary Key,唯一標(biāo)識(shí)記錄的 id
- 外鍵 Foreign Key,用于指定一張表中的屬性必須存在于另一張表中
- 注意 relation 和 table 語義一樣
- 一個(gè)外鍵的例子

- 如何從 Database 中取數(shù)據(jù)?
? ? 通過 DML (Data Manipulation Languages)

- Relational Algebra 關(guān)系代數(shù)
- Ted Codd 提出了在 Relational Algebra 中的其中基本運(yùn)算符

? ? - 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;
? ? ? ??

- 一些后續(xù)研究的額外的操作符
? ??

- 一些優(yōu)化策略

- 關(guān)系型模型與任何查詢語言的實(shí)現(xiàn)無關(guān),實(shí)際上當(dāng) Ted Codd 在他寫關(guān)系型模型論文時(shí)并沒有提出 SQL,他提出了 關(guān)系代數(shù),并推出了自己的語言叫 Alpha,與(1970)同年推出的 SQL、Ingres (伯克利)、Quel 都是競爭對手。
- SQL 只是一個(gè)標(biāo)準(zhǔn)
- 結(jié)論?
? ??
