在CMU 又發(fā)現(xiàn)一套很好的資源
https://15445.courses.cs.cmu.edu/fall2018/schedule.html
這個文集,就決定讀薄這門課。希望對自學(xué)這門課的人有一定幫助吧。
前置課程 CSAPP(見我的CSAPP的文集)
編程語言C++ 11,簡易教程 https://www.thegeekstuff.com/2016/02/c-plus-plus-11/
教材,https://www.db-book.com/db7/index.html
進(jìn)入正題
什么是數(shù)據(jù)庫
我們經(jīng)常會發(fā)現(xiàn),整個世界是具備一定的聯(lián)系的巧婶。比如我買了一部IPHONE手機(jī),你也買了一部涂乌。我在A班讀書艺栈,你在B班讀書。A班里有我骂倘,XXX眼滤,等40個同學(xué)。這些都是一個個的關(guān)系历涝。
在計(jì)算機(jī)系統(tǒng)中诅需,我是一個數(shù)據(jù)漾唉,班級是一個數(shù)據(jù),為了把數(shù)據(jù)的內(nèi)在聯(lián)系進(jìn)行建模就產(chǎn)生了關(guān)系型數(shù)據(jù)庫的概念堰塌。
數(shù)據(jù)庫也是很多電腦程序的最核心的組件赵刑。
舉個簡單的例子
我們現(xiàn)在有一組音樂家的信息,還有那些音樂家發(fā)布專輯的信息场刑。 在沒有數(shù)據(jù)庫的時代般此,我們該如何保存查詢這些信息呢?
一個經(jīng)典的做法是存進(jìn)CSV中牵现。(這里要求你知道啥是CSV,不知道百度一下)
就會是如下這樣
我們該如何找到Ice Cube
出道的年份呢铐懊?
我們可以用如下代碼來做
這種做法是不足夠好的,所以人們開始思考瞎疼?
在數(shù)據(jù)完整性
上
- 我們該如何確保這個音樂家對每個專輯 都是同樣的那個音樂家呢科乎?
- 如果有人在出道日期上寫了個‘哈哈哈’,怎么辦呢
- 我們要如何存儲多個音樂家合作發(fā)布的專輯呢贼急?
在實(shí)現(xiàn)
上
- 如何找到一個特定的條目
- 有一個新的APP 想用同一個DB茅茂,怎么辦
- 2個線程同時寫同一個文件怎么辦?
在持久化
上
- 如果在我們的程序更新記錄時機(jī)器崩潰怎么辦太抓?
- 如果我們想在多臺機(jī)器上復(fù)制數(shù)據(jù)庫以獲得高可用性空闲,該怎么辦?
這就引出了我們數(shù)據(jù)庫管理系統(tǒng)(DBMS)
DBMS是允許應(yīng)用程序存儲和分析數(shù)據(jù)庫中的信息的軟件走敌。
通用DBMS旨在允許數(shù)據(jù)庫的定義碴倾,創(chuàng)建,查詢掉丽,更新和管理影斑。
下面引出2個新的詞匯
data model:數(shù)據(jù)模型是用于描述數(shù)據(jù)庫中的數(shù)據(jù)的概念的集合。
schema: 模式是使用給定數(shù)據(jù)模型對特定數(shù)據(jù)集合的描述机打。
DB 分類
最下面2個是棄用的
關(guān)系模型的三要素
structure結(jié)構(gòu):關(guān)系的定義及其結(jié)構(gòu)內(nèi)容。
integrity完整性:確保數(shù)據(jù)庫的內(nèi)容滿足限制片迅。
manipulation操縱:如何訪問和修改數(shù)據(jù)庫的內(nèi)容残邀。
一個關(guān)系 其實(shí)就是數(shù)據(jù)的一個列。是一個實(shí)體的一個屬性柑蛇。
在這個基礎(chǔ)上芥挣,就會有一個或者一組屬性可以唯一確定一個實(shí)例,我們稱它為主鍵(primary key),在不指定主鍵耻台,有些DB會增加一個隱式的主鍵空免。
外鍵指定來自一個關(guān)系的屬性必須映射到另一個關(guān)系中的元組。
數(shù)據(jù)操縱語言(Data Manipulation Language, DML)是SQL語言中盆耽,負(fù)責(zé)對數(shù)據(jù)庫對象運(yùn)行數(shù)據(jù)訪問工作的指令集
關(guān)系代數(shù)
σ Select
π Projection
∪ Union
∩ Intersection
-Difference
× Product
? Join
其他關(guān)系代數(shù)
關(guān)系代數(shù)仍然定義了如何計(jì)算查詢的HIGH-LEVEL的步驟蹋砚。更好的方法是只指定自己要查詢的內(nèi)容扼菠,而忽略查詢的細(xì)節(jié),這就是SQL
如下 2種關(guān)系代數(shù)查詢的內(nèi)容是一致的
→ σ{b_id=102}(R?S) vs. (R?(σ{b_id=102}(S))
SQL 就是 同樣的坝咐。
結(jié)語
數(shù)據(jù)庫無處不在循榆。
關(guān)系代數(shù)定義了在關(guān)系數(shù)據(jù)庫上處理查詢的原語。
當(dāng)我們討論查詢優(yōu)化+執(zhí)行時墨坚,我們將再次看到關(guān)系代數(shù)秧饮。