《數據庫系統概論》筆記整理(一)

一)數據庫

1. 定義

數據庫是按照數據結構來組織、存儲和管理數據的倉庫

2. 分類

  • 關係型數據庫:Oracle、DB2、MySQL等

  • 非關係型數據庫:MongoDB、Memecached、Redis等

區別:
	關係:安全,浪費空間:磁盤存儲
	非關係:效率高,不是特別安全(內存存儲容易丟失)

3. 數據模型

數據模型是數據特徵的抽象

  • 概念模型:按用戶觀點對數據和信息建模
  • 邏輯模型和物理模型
    • 邏輯模型:層次模型,網狀模型,關係模型等
    • 物理模型:數據在系統內部(如磁盤)的表現方式和存取方法
數據模型組成要素:數據結構,數據操作,數據完整性約束

概念模型:實體,屬性,碼,實體型,實體集,聯繫
關係模型:關係,元組,屬性,碼,域,分量,關係模式
	數據操作:增刪改查
	完整性約束:實體完整性,參照完整性,用戶定義完整性
	(關係 == 二尾表)

4. 三級結構和二級映像

  • 外模式:數據庫用戶能看見和使用的局部數據的邏輯結構和特徵的描述

    外模式:模式的子模式
    
  • 模式:數據庫全體數據的邏輯結構和特徵的描述,是所有用戶的公共數據視圖

  • 內模式:數據物理結構和存儲方式的描述

二)關係型數據庫

1. 定義

關係型數據庫,是一種建立在關係模型上的數據庫

關係模型:建立在關係(一張二維表)上的模型

2. 組成要素

數據結構

數據操作

完整性約束

  1. 實體完整性:主鍵(關係的主屬性,不能取空值)
  2. 參照完整性:外碼(空值,或所引用關係元素的主碼值)
  3. 用戶定義完整性

3. SQL

關係數據庫的三級結構

外模式:局部數據的邏輯結構和視圖
模式:全局數據
內模式:物理結構和存儲方式

外模式==視圖+部分基本表
模式==若干基本表
內模式==存儲文件

一或多個表,對應一個存儲文件
一個表有若干索引

數據定義語言

  • 對象:模式,表,視圖,索引

create

drop

alter

數據更新語言

insert

update

delete

數據查詢語言

select

數據查詢:
	指定列:單表查詢,多表查詢
	去重:distinct
	條件:where(比較,範圍,集合,字符匹配,空值,多重條件)
	排序:order by
	分組:group by having
	聚集函數:count、sum、avg、max、min
	
	連接查詢:等值連接,非等值連接
		自身連接
		外連接:左外,右外,全
	嵌套查詢:any,all謂詞/聚集函數和in等
		exists
	集合查詢:union,intersect,except

數據控制語言

grant

revoke

4. 數據類型

顯示寬度:用於顯示,長度不夠前綴填充0

  • 數值:
    • 整數:1,2,3,4,8字節
    • 小數:浮點,定點
  • 字符串:char,varchar,text,blob,enum,set
  • 日期時間:日期時間,日期,時間,時間戳,年份

5. 完整性詳解

實體完整性

主鍵定義

參照完整性

外鍵定義

用戶定義完整性

  • 屬性約束:空與非空,唯一,check

    name varchar(12) not null
    card_id char(18) unique not null
    sex char(2) check (sex in('男', '女'))
    score int check (score>=0 and score<=100)
    
  • 元組:check

    # 男性不能以Ms開頭
    check (sex='女' or name not like 'Ms%')
    
  • 完整性約束命名語句:constraint <完整性約束條件名> <完整性約束條件>

    條件:not null,unique,primary key,foreign key,check等
    

6. 觸發器

  • 定義:事件,條件,動作

    事件:增刪改,事務的結束等
    條件真,觸發動作
    
    create trigger <觸發器名>
    before|after insert|delete|update [of <屬性>] on <表>
    referencing #引用變量
    	oldrow as <別名>,
    	newrow as <別名>
    for each row
    [when <條件>] <動作>
    
    
    說明:若沒有`for each row`,可引用變量爲:oldtable,newtable
    
  • 激活

  • 刪除

7. 關係數據庫理論

P第6章 《數據庫系統概論》

基本名詞:平凡函數依賴,非平凡函數依賴,決定因素,完全函數依賴,部分函數依賴,傳遞函數依賴
		(完全:X→Y,但X的真子集不能決定Y
		(部分:X→Y,但X的真子集→Y

		碼,候選碼,超碼,主屬性,非主屬性|非碼屬性
		外碼

數據依賴

  • 函數依賴:例如學號決定學生信息(姓名,專業…),即y=f(x),x→y

    常見問題:數據冗餘,更新異常,插入異常,刪除異常
    
  • 多值依賴

範式

1NF:關係的每一個變量必須是不可分的數據項
	表的列,不可分
2NF:每一個非主屬性完全函數依賴於任何一個候選碼
3NF:每一個非主屬性不傳遞依賴、不部分依賴於碼
BCNF:??
	排除傳遞和部分函數依賴
## 多值依賴:??
4NF:??

8. 數據庫編程

  • 過程化SQL:塊

  • 存儲過程和函數

  • 過程化SQL的遊標

三)併發控制

1. 事務

事務(一批操作),要麼全成功,要麼全失敗。

特性

ACID

併發事務問題

  • 髒讀
  • 不可重複讀
  • 幻讀

事務隔離級別

  • 讀未提交
  • 讀已提交
  • 可重複讀
  • 串行化

併發事務解決方案

  • MVCC

事務故障

  1. 事務故障
  2. 系統故障:
  3. 介質故障
  4. 計算機病毒

數據恢復

  1. 數據冗餘

    數據轉儲:數據庫複製到存儲介質
    登記日誌文件
    
  2. 數據恢復

2. 併發控制

併發操作帶來的數據不一致性包括:丟失修改不可重複讀讀髒數據

  • 原因:破壞事務隔離性
  • 解決:封鎖,時間戳,樂觀控制,多版本併發控制MVCC等

封鎖

X(排他|獨享)鎖和S(共享)鎖

一級封鎖協議:事務修改數據前,加X鎖,事務結束後才解鎖
	解決:丟失修改。不解決:不可重複讀,讀髒數據
二級封鎖協議:一級封鎖協議+事務讀數據前,加S鎖,讀完後解鎖
	解決:丟失修改,讀髒數據。不解決:不可重複讀
三級封鎖協議:一級封鎖協議+事務讀數據前,加S鎖,事務結束後才解鎖
	解決:丟失修改,讀髒數據,不可重複讀
	
其他問題:活鎖,死鎖
	活鎖:某個事務一直處於等待
		解決:先來先服務
	死鎖:多個事務一直不能結束
		解決:預防;診斷——處理

併發調度的可串行性

可串行化調度:多個事務的併發執行結果 == 按某一次序串行執行這些事務的結果

可串行性:併發調度,當且僅當它是串行化,認爲是正確調度

兩段鎖協議:保證併發調度的正確性,從而保證多個事務執行結果的正確
	所有事務必須分兩個階段對數據項加鎖和解鎖
	1. 在對任何數據進行讀寫之前,首先要申請並獲得該數據的封鎖
	2. 在釋放一個封鎖之後,事務不可再申請和獲取任何其他封鎖

封鎖的粒度

封鎖對象的大小,封鎖粒度

  • 邏輯單元:屬性值,屬性值集合,元組,關係,索引項,索引,數據庫
  • 物理單元:頁,物理記錄等
多粒度封鎖
顯示封鎖:應事務要求直接加到數據對象上的鎖
隱式封鎖:上級節點加鎖

加鎖前,檢查數據對象的顯示封鎖,上級節點——隱式封鎖,下級節點顯示封鎖
	效率過低!!

引入意向鎖:避免檢查下級節點的顯示封鎖
	IS:父IS,子S
	IX:父IX,子X
	SIX:加S鎖,再加IX鎖
		讀整個表,加S鎖
		更新元組,子X,則父IX,即加IX鎖

3. 多版本併發控制

理解不夠,暫略

參考

《數據庫系統概論 第5版》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章