《系統架構師》——數據庫系統
考點分布:
三級模式 - 兩級映射
E-R模型:實體-關系-屬性
關系代數:
並:兩個模式中直接合並成一個模式,新模式的行數=兩個模式行數之和
交:兩個模式中所有屬性值完成相同的行
差:模式A 與 模式B 之差 = 模式A -(模式A 並 模式B)
笛卡爾積:新模式的行數=兩個模式行數之積,新模式的列包括兩個模式的所有列
聯接:根據指定屬性值來聯接兩個模式,組成一個新模式。
投影:針對單個模式而言,即選擇指定列出來,作為一個新模式
選擇:針對單個模式而言,容易與投影混淆,選擇出指定列為指定值的行作為一個新模式
非規範化的關系模式,可能存在數據冗余、更新異常、插入異常和刪除異常的問題。
超鍵:唯一標識元組(可以存在冗余)
候選鍵:在超鍵的基礎上消除多余屬性(應該就是我們常設計的無冗余的聯合主鍵),一般一個模式只有一個候選鍵,但也有多個候選鍵的情況
主鍵:在候選鍵中任選一個(聯合主鍵中的其中一項)
外鍵:其它關系的主鍵
函數依賴:
1、完全函數依賴:其它屬性可以由超鍵推導,而不能由超鍵中任何一個子集推導,就稱為完全函數依賴,從規範上來說是好的設計。
2、部分函數依賴:超鍵中的某一個子集也能推導出其它屬性,就稱為部分函數依賴,這是我們需要避免的。(避免了這個就達成了2NF)
3、傳遞函數依賴:超鍵可以推導出屬性A,屬性A也可以推導出屬性B,則B傳遞函數依賴於超鍵。(避免了就達成了3NF)
將 E-R 模型轉換成關系模式時,一個實體都轉換成一個關系模式,1:1聯系不用單獨轉換成關系模式, 1:n 關系可以單獨轉換也可以不轉換,m:n 關系單獨轉換成一個關系模式。
求候選鍵的方法:
1、將關系模式按函數依賴關系用有向圖表示
2、找所有入度為0的結點,遍歷該有向圖,若能遍歷,則這些結點就是候選鍵
3、如果上一步無法完全遍歷,則加入一些中間結點,直至可以遍歷所有結點,則這些結點就是候選鍵。
數據庫範式:逐步解決插入異步、刪除異常、數據冗余
1NF:屬性不可拆分(其實就是避免一個屬性值包括復合數據)
2NF:消除非主屬性對候選鍵的部分依賴(滿足完全函數依賴,對候選鍵去冗余)
3NF:消除非主屬性對候選鍵的傳遞依賴(消除傳遞依賴,非主屬性只能依賴於主屬性,不能依賴於其它非主屬性)
BCNF:消除主屬性對候選鍵的傳遞依賴(不允許某個主屬性可以由其它主屬性或非主屬性推導,當只有一個候選鍵時,等同於3NF)
BCNF要側重說明,比如一張關系表為 (玩家ID,昵稱,物品編號,物品數量),其中昵稱不允許重復。那 (玩家ID,物品編號) ->(昵稱,物品數量),(昵稱,物品編號)->(玩家ID,物品數量),這樣這張關系表就存在兩個候選鍵 (玩家ID,物品編號) 和 (昵稱,物品編號)了,而這裏玩家ID和昵稱作為主屬性,是可以被其它屬性推導出來的。這樣就不符合BCNF了。所以,BCNF只有當存在多個候選鍵時才和3NF有所區別。
無損分解:個人總結,判斷是否為無損分解,先將依賴關系中所有入度為0(即無法被推導)的屬性作為一個子模式(如果沒有拆分出這樣的子模式,一定是有損分解,當然有該子模式的超集也是可以的),在這個子模式基礎上根據依賴關系,如果能推導出所有屬性就是無損分解。
並發控制:
封鎖協議
S鎖:共享鎖(share locks),又稱讀鎖,只可以讀取數據,當某事務對對象加上S鎖之後,其它事務只能對該對象加S鎖,而不能加X鎖,直到所有的S鎖都被釋放。
X鎖:排它鎖(eXclusive lock),又稱寫鎖,可以讀取和修改數據,當事務對對象加上X鎖之後,其它事務都不能對該對象加任何鎖,直到該X鎖被釋放。
數據庫完整性約束:
1、實體完整性約束
2、參照完整性約束
3、用戶自定義完整性約束
觸發器
數據庫安全:
數據備份:
分布式數據庫的體系結構:
分布式數據庫概念:
數據倉庫和數據挖掘:
聯邦數據庫:
NoSQL:
反規範化:
大數據:
《系統架構師》——數據庫系統