CMU 15445 1.關(guān)系模型

在CMU 又發(fā)現(xiàn)一套很好的資源
https://15445.courses.cs.cmu.edu/fall2018/schedule.html

這個(gè)文集,就決定讀薄這門課。希望對(duì)自學(xué)這門課的人有一定幫助吧。

前置課程 CSAPP(見(jiàn)我的CSAPP的文集)
編程語(yǔ)言C++ 11,簡(jiǎn)易教程 https://www.thegeekstuff.com/2016/02/c-plus-plus-11/
教材,https://www.db-book.com/db7/index.html

進(jìn)入正題

什么是數(shù)據(jù)庫(kù)

我們經(jīng)常會(huì)發(fā)現(xiàn),整個(gè)世界是具備一定的聯(lián)系的。比如我買了一部IPHONE手機(jī),你也買了一部。我在A班讀書(shū),你在B班讀書(shū)。A班里有我,XXX,等40個(gè)同學(xué)。這些都是一個(gè)個(gè)的關(guān)系。
在計(jì)算機(jī)系統(tǒng)中,我是一個(gè)數(shù)據(jù),班級(jí)是一個(gè)數(shù)據(jù),為了把數(shù)據(jù)的內(nèi)在聯(lián)系進(jìn)行建模就產(chǎn)生了關(guān)系型數(shù)據(jù)庫(kù)的概念。

數(shù)據(jù)庫(kù)也是很多電腦程序的最核心的組件。

舉個(gè)簡(jiǎn)單的例子

我們現(xiàn)在有一組音樂(lè)家的信息,還有那些音樂(lè)家發(fā)布專輯的信息。 在沒(méi)有數(shù)據(jù)庫(kù)的時(shí)代,我們?cè)撊绾伪4娌樵冞@些信息呢?
一個(gè)經(jīng)典的做法是存進(jìn)CSV中。(這里要求你知道啥是CSV,不知道百度一下)
就會(huì)是如下這樣


image.png

我們?cè)撊绾握业?code>Ice Cube 出道的年份呢?

我們可以用如下代碼來(lái)做


image.png

這種做法是不足夠好的,所以人們開(kāi)始思考?

數(shù)據(jù)完整性
  1. 我們?cè)撊绾未_保這個(gè)音樂(lè)家對(duì)每個(gè)專輯 都是同樣的那個(gè)音樂(lè)家呢?
  2. 如果有人在出道日期上寫(xiě)了個(gè)‘哈哈哈’,怎么辦呢
  3. 我們要如何存儲(chǔ)多個(gè)音樂(lè)家合作發(fā)布的專輯呢?
實(shí)現(xiàn)
  1. 如何找到一個(gè)特定的條目
  2. 有一個(gè)新的APP 想用同一個(gè)DB,怎么辦
  3. 2個(gè)線程同時(shí)寫(xiě)同一個(gè)文件怎么辦?
持久化
  1. 如果在我們的程序更新記錄時(shí)機(jī)器崩潰怎么辦?
  2. 如果我們想在多臺(tái)機(jī)器上復(fù)制數(shù)據(jù)庫(kù)以獲得高可用性,該怎么辦?

這就引出了我們數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
DBMS是允許應(yīng)用程序存儲(chǔ)和分析數(shù)據(jù)庫(kù)中的信息的軟件。
通用DBMS旨在允許數(shù)據(jù)庫(kù)的定義,創(chuàng)建,查詢,更新和管理。

下面引出2個(gè)新的詞匯
data model:數(shù)據(jù)模型是用于描述數(shù)據(jù)庫(kù)中的數(shù)據(jù)的概念的集合。

schema: 模式是使用給定數(shù)據(jù)模型對(duì)特定數(shù)據(jù)集合的描述。

DB 分類

image.png

最下面2個(gè)是棄用的

關(guān)系模型的三要素

  1. structure結(jié)構(gòu):關(guān)系的定義及其結(jié)構(gòu)內(nèi)容。

  2. integrity完整性:確保數(shù)據(jù)庫(kù)的內(nèi)容滿足限制。

  3. manipulation操縱:如何訪問(wèn)和修改數(shù)據(jù)庫(kù)的內(nèi)容。

一個(gè)關(guān)系 其實(shí)就是數(shù)據(jù)的一個(gè)列。是一個(gè)實(shí)體的一個(gè)屬性。


image.png

在這個(gè)基礎(chǔ)上,就會(huì)有一個(gè)或者一組屬性可以唯一確定一個(gè)實(shí)例,我們稱它為主鍵(primary key),在不指定主鍵,有些DB會(huì)增加一個(gè)隱式的主鍵。


image.png

外鍵指定來(lái)自一個(gè)關(guān)系的屬性必須映射到另一個(gè)關(guān)系中的元組。


image.png

數(shù)據(jù)操縱語(yǔ)言(Data Manipulation Language, DML)是SQL語(yǔ)言中,負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)對(duì)象運(yùn)行數(shù)據(jù)訪問(wèn)工作的指令集

關(guān)系代數(shù)
σ Select

image.png

π Projection


image.png

∪ Union


image.png

∩ Intersection


image.png

-Difference


image.png

× Product


image.png

? Join


image.png

其他關(guān)系代數(shù)


image.png

關(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é)語(yǔ)

數(shù)據(jù)庫(kù)無(wú)處不在。

關(guān)系代數(shù)定義了在關(guān)系數(shù)據(jù)庫(kù)上處理查詢的原語(yǔ)。

當(dāng)我們討論查詢優(yōu)化+執(zhí)行時(shí),我們將再次看到關(guān)系代數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容