?
一、關系型數據庫簡介
a)DML
SQL語言是非過程的,一次查詢中,可以輸入多張表,但結果只是一張表。比如
select instructor.name
from instructor
where instructor.dept_name=’history’,
查詢語句定義了要查找dept_name列為history的數據,并顯示name列,執行后得到的是一張表,只有一個name列,每個符合dept_name=’history’篩選條件的數據作為一行。
b) DDL
DDL可以定義表、約束、斷言等,比如有如下創建表的語句:
create table department(
dept_name char(20),
building char(15),
budget numeric(12,2));
創建了表department和它的列,并指定了各列的數據類型。DDL語句會同時更新數據字典。
c) 從應用程序訪問數據庫
SQL語句沒有通用的圖靈機那么強大,有很多計算是SQL無法做到的,比如接收用戶輸入、顯示內容、網絡通訊等,這些功能必須使用像c、c++等宿主(host)語言來實現,然后在程序中嵌入SQL語言來訪問數據庫。
從應用程序訪問數據庫有兩種方式:
提供應用程序接口來傳遞DML、DDL,然后取回結果。比如c語言的ODBC、java的JDBC等;
在應用程序中使用DML預編譯器,然后通過擴展宿主語言的語法來嵌入DML調用。
二、數據庫設計
需求分析階段、概念設計階段和實現階段。
a)在概念設計階段,要選擇數據模型,將需求轉化為schema,這個階段的重點是對數據和數據關系進行描述。這個階段要解決使用哪些(what)字段和怎樣(how)組織這些字段的問題,前者是商業問題,后者才是計算機科學問題。
關于組織字段的的方式通常有兩種,一種是使用E-R模型,一種是使用算法自動生成表。
這個階段設計的schema需要滿足對數據增刪改查的要求,
b) 實現階段,包括邏輯設計和物理設計兩步,邏輯設計將高度抽象的概念模型轉換為數據庫實現,然后物理設計則解決文件的組織、存儲結構等問題。
c) 不好的設計會造成信息的冗余以及缺乏表達某些信息的能力:
比如這張表同時包含了教師(id,name,salary)和部門信息,history信息在兩行中都有,修改history的budget時需要兩行都修改;而如果我們想增加一個部門時,就會暴露出這個設計表達能力不足的問題,因為只有先增加一個教師才能增加部門。
三、數據存儲和檢索
對一個數據庫系統來說,存儲管理器和查詢處理器是非常重要的兩部分。
a) 存儲管理器
數據存儲在硬盤上,CPU的和內存的速度大于硬盤的讀取速度,所以它需要盡可能地減少數據在硬盤與內存之間的轉移,并負責將DML語句翻譯成物理層的命令。即存儲管理器負責數據的增刪改查,它包含的模塊或功能有:
權限及完整性管理器:負責檢查完整性約束、控制用戶訪問權限;
事務管理器:用于保證系統在發生故障時的一致(正確)狀態,以及保證并發事物無沖突地執行;
文件管理器:負責硬盤空間的分配并管理保存在硬盤上的數據結構;
緩存管理器:負責將數據從硬盤讀取到內存,并決定將哪些數據緩存到內存。緩存管理器是數據庫系統的重要部分,有了緩存管理器,數據庫才能夠處理比內存容積大得多的數據。
存儲管理器所操作的文件類型有:
數據文件:數據庫本身
數據字典:對schema的描述
索引:用于提高檢索效率,索引維護了一系列指向特定數據的指針
b) 查詢處理器
包含多個部分:
DDL翻譯器:翻譯DDL指令并記錄到數據字典
DML編譯器:將DML語句編譯成查詢評估引擎能理解的低級指令。DML語句往往可以有不同的翻譯,這些翻譯的執行結果相同但性能不一,DML編譯器也負責查詢優化,選擇性能最高的翻譯方式。
查詢評估引擎:執行由DML編譯器生成的低級指令
四、事務管理
a) 某些對數據的的操作常常會形成單一的邏輯工作單元,比如轉賬,從A賬戶扣款M元,然后給B賬戶增加M元,這兩步操作必須要么都成功,要么都失敗,這樣的要求也稱為原子性(atomicity);另外A、B賬戶的總和在操作事務前后保持不變,這稱為一致性(consistency)。事務操作必須滿足原子性和一致性,在操作過程中允許暫時地違背一致性(比如轉賬,A、B賬戶的增減需要過程)。
b) 一致性由開發人員來保證,而原子性由數據庫自身來保證;
對于轉賬操作來說,開發人員需要合理地劃分操作步驟,比如講之分為從A賬戶轉出和給B賬戶轉入兩步,如果將這兩步劃分為一個事務,則符合一致性,如果任何一步獨立,則會違背一致性;
c) 數據庫的恢復管理器負(recovery manager)負責原子性,實際應用中,事務難免會失敗,這時要屏蔽失敗的事務對數據庫的影響(回滾到失敗前的狀態failure recovery)。
并發控制器(concurrency-control manager),在遇到事務需要并發執行時,無法保存操作前的狀態,這時由并發控制器通過控制事務間的交互來保證一致性。
恢復管理器和并發控制器組成了事務管理器。
五、數據庫結構(database architecture)
數據庫的結構多種多樣,比如有集中式(centralize)、服務端-客戶端式、并行式(parallel)、分布式(distrubuted)等。
數據庫的通用結構如圖:
六、數據庫的普通用戶和管理員
數據庫的用戶可以分為普通用戶(user)和管理員(administrator)
a)普通用戶及對應的用戶接口
依據用戶期望的與數據庫的交互方式可以進一步分為四類,對應有不同的用戶接口
無經驗的用戶(naive user):使用事先寫好的程序與數據庫交互,用戶接口通常為表單;
開發者:負責編寫數據庫交互界面;
熟練的用戶(sophisticate):比如數據分析員,使用專業的分析軟件或直接寫SQL來與數據庫交互;
專門的用戶(specialized user),編寫特殊的數據庫應用的人員,比如計算機輔助設計系統、知識庫、專家系統、存儲復雜數據結構(聲音、圖像)的系統等。
b)管理員(DBA)
通常DBA可以做的操作包括:
定義schema
定義數據的存儲結構和訪問方式
修改schema和數據的物理組織方式
訪問權限控制
日常維護,比如定期備份、確保硬盤空間充足、監控數據庫高效運行等
學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan