本文根據華南理工大學軟件學院《數據庫系統》課程及相關教材《數據庫系統概念》總結,作復習回顧用。
內容涵蓋考試范圍,最多到第十四章。
Chapter. 1 引言
數據庫管理系統(database-management system, DBMS)由一個互相關聯的數據的集合和一組用以訪問這些數據的程序組成,這個數據集合通常被稱為數據庫(database)。DBMS的主要目標是提供一種可以方便、高效地存取數據庫信息的途徑。
設計數據庫系統的目的:為了管理大量信息。
文件處理系統(file-processing system)儲存組織信息的弊端有:數據冗余或不一致(data redundancy and inconsistency)、數據訪問困難(difficulty in accessing data)、數據孤立(data isolation)、完整性問題(integrity problem)、原子性問題(atomicity problem)、並發訪問異常(concurrent-access anomaly)、安全性問題(security problem)。
數據庫系統的一個主要目的:給用戶提供數據的抽象視圖。
抽象層次:物理層(physical level)、邏輯層(logical level)、視圖層(view level)。
特定時刻存儲在數據庫中的信息的集合稱作數據庫的一個實例(instance),而數據庫的總體設計稱作數據庫模式(schema)。
根據不同的抽象層次,數據庫系統可以分為集中不同的模式:物理模式(physical schema)在物理層描述數據庫的設計;邏輯模式(logical schema)在邏輯層描述數據庫的設計。數據庫在視圖層也可以有幾種模式,有時稱為子模式(subschema),它描述了數據庫的不同視圖。
應用程序如果不依賴於物理模式,它們就被稱為具有物理數據獨立性(physical data independence),即使物理模式改變了它們也無需重寫。
數據庫結構的基礎是數據模型(data model)。數據模型是一個描述數據、數據聯系、數據語義以及一致性約束的概念工具的集合,提供了一種描述物理層、邏輯層以及視圖層數據庫設計的方式。
數據模型可被划分為四類:關系模型(relational model)、實體-聯系模型(entity-relationship model)、基於對象的數據模型(object-based data model)、半結構化數據模型(semistructured data model)。在歷史上網狀數據模型(network data model)和層次數據模型(hierarchical data model)先於關系數據模型出現。
數據庫系統提供數據定義語言(daata-definition language)來定義數據庫模式,以及數據操縱語言(data-manipulation language, DML)來表達數據庫的查詢和更新。實際上,這兩種語言不是分離的,它們簡單地構成了單一的數據庫語言。
數據操縱語言使得用戶可以訪問或操縱那些按照某種適當的數據模型組織起來的數據,有以下訪問類型:
對存儲在數據庫中的信息進行檢索。
向數據庫中插入新的信息。
從數據庫中刪除信息。
修改數據庫中存儲的信息。
有兩類基礎的DML:過程化DML(procedural DML)和聲明式DML(declarative DML)。DML中設計信息檢索的部分稱作查詢語言(query language)。
數據庫模式是通過一系列定義來說明的,這些定義由一種稱作數據定義語言(DDL)的特殊語言來表達。DDL也可用於定義數據的其他特征。數據庫系統所使用的儲存結構和訪問方式是通過一系列特殊的DDL語句來說明的,這種特殊的DDL稱作數據存儲和定義(data storage and definition)語言。
存儲在數據庫中的數據必須滿足某些一致性約束(consistency constraint):域約束(domain constraint)、參照完整性(referential)、斷言(assertion)、授權(authorization)
DDL的輸出放在數據字典(data dictionary)中,數據字典包含了元數據(metadata),元數據是關於數據的數據。
為了訪問數據庫,DML語句需要有宿主語言來執行,有兩種途徑可以做到這一點:通過提供應用程序接口、通過擴展宿主語言的語法。
數據庫設計的過程:概念設計(conceptual-design)、功能需求說明(specification of functional requirement)、邏輯設計(logical-design phrase)、物理設計(physical-design phrase)。
實體-聯系(E-R)數據模型使用一組稱作實體的基本對象,以及這些對象間的聯系。實體是現實世界中可區別於其他對象的一件事情或一個物體。在數據庫中,實體通過屬性(attribute)集來描述。
聯系(relationship)是幾個實體之間的關聯。同一類型的所有實體的集合稱作實體集(entity set),同一類型的所有幾何稱作聯系集(relationship set)。數據庫的總體邏輯結構可以用實體-聯系圖(entity-relationship diagram)進行圖形化表示。最常用的畫圖方法是采用統一建模語言(unified modeling language, UML)。
除了實體和聯系外,E-R模型還描繪了數據庫必須遵守的對其內容的某些約束。一個重要的約束是映射基數(mapping cardinality),它表示通過某個聯系集能與一實體進行關聯的實體數目。
設計關系數據庫所用到的另一種方法是通常被稱為規范化的過程,它的目標是生成一個關系模式集合,使我們存儲信息時沒有不必要的冗余,同事又能很輕易地檢索數據。這種方法是設計一種符合適當的范式的模式(normal form)的模式,為確定一個關系模式是否符合想要的范式,我們需要額外的關於用數據庫建模的現實世界中機構的信息。最常用的方法是使用函數依賴(functional dependency)。
儲存管理器是數據庫系統中負責在數據庫中儲存的低層數據與應用程序以及想系統提交的查詢之間提供接口的部件,負責與文件管理器進行交互。存儲管理部件包括:權限及完整性管理器(authorization and integrity manager)、事務管理器(transaction manager)、文件管理器(file manager)、緩沖區管理器(buffer manager)。存儲管理器實現了幾種數據結構:數據文件(data files)、數據字典(data dictionary)、索引(index)。
查詢處理器包括:DDL解釋器(DDL interpreter)、DML編譯器(DML compiler)、查詢執行引擎(query evaluation engine)。
事務(transaction)是數據庫應用中完成單一邏輯功能的操作集合。每一個事務是一個既具原子性(atomicity)又具有一致性(consistency)的單元。為了保證原子性,失敗的事務必須對數據庫狀態不產生任何影響,數據庫必須被恢復到該失敗事務開始執行以前的狀態,這種情況下數據庫系統必須進行故障恢復(failure recovery),即檢測系統故障並將數據庫恢復到故障發生以前的狀態。並發控制管理器(concurrency-control manager)控制並發事務間的相互影響,保證數據庫一致性。事務管理器包括並發控制管理器和恢復管理器(recovery manager)。
數據庫應用通常可分為兩或三個部分。在一個兩層體系結構(two-tier architecture)中,應用程序駐留在客戶機上,通過查詢語言表達式來調用服務器上的數據庫系統功能。而在一個三層體系結構中(three-tier architecture)中,客戶機只作為一個前端並且不包含任何直接的數據庫調用。客戶端通常通過一個表單界面與應用服務器(application server)進行通信。而應用服務器與數據庫系統通信以訪問數據。應用程序的業務邏輯(business logic),也就是說在何種條件下作出何種反應,被嵌入到應用服務器中,而不是分布在多個客戶機上。
數據挖掘(data mining)指半自動地分析大型數據庫並從中找出有用的模式的過程。
對系統進行集中控制的人稱作數據庫管理員(database administrator, DBA),作用有:模式定義(schema definition)、存儲結構及存取方法定義(storage structure and access-method definition)、模式及物理組織的修改(schema and physical-organization modification)、數據訪問授權(granting of authorization for data access)、日常維護(routine maintenance)。
Chapter. 2 關系模型介紹
關系數據庫由表的集合構成。用關系實例(relation instance)這個術語來表示一個關系的特定實例。
數據庫模式(database schema)是數據庫的邏輯設計,數據庫實例(database instance)是給定時刻數據庫中數據的一個快照。關系模式(relation schema)的概念對應於程序設計語言中類型定義的概念。
超碼(superkey)是一個或多個屬性的集合,這些屬性的組合可以使我們在一個關系中唯一地標識一個元組。若超碼K的任意真子集都不能成為超碼,則超碼K被稱為候選碼(candidata key)。
主碼(primary key)代表被數據庫設計者選中的,主要用來在一個關系中區分不同元組的候選碼。
一個關系模式(如r1)可能在它的屬性中包括另一個關系模式(如r2)的主碼,這個屬性在r1上稱作參照r2的外碼(foreign key)。關系r1也成為外碼依賴的參照關系(referencing relation),r2叫做外碼的被參照關系(referenced relation)。
一個含有主碼和外碼依賴的數據庫模式可以用模式圖(scheme diagram)來表示。
查詢語言(query language)是用戶用來從數據庫中請求獲取信息的語言。在過程化語言中,用戶知道系統對數據庫執行一系列操作以計算出所需結果;在非過程化語言中,用戶只需描述所需信息,而不用給出獲取該信息的具體過程。
所有的過程化關系查詢語言都提供了一組運算,這些運算要么施加於單個關系上,要么施加於一對關系上,且群算結果總是單個的關系。最常用的關系運算是從單個關系中選出滿足一些特定謂詞的特殊元組。另一個常用的運算是從一個關系中選出特定的屬性(列),其結果是一個只包含那些被選擇屬性的新關系。
連接運算可以通過下述方式來結合兩個關系:把分別來自兩個關系的元組對合並成單個元組。兩個關系上的自然連接運算所匹配的元組在兩個關系共有的所有屬性上取值相同。笛卡爾積運算是從兩個關系中合並遠足,其結果包含來自兩個關系元組的所有對,無論它們的屬性值是否匹配。
Chapter. 3 SQL
SQL語言有以下幾個部分:數據定義語言(DDL)、數據操縱語言(DML)、完整性(integrity)、視圖定義(view definition)、事務控制(transaction control)、嵌入式SQL和動態SQL(embedded SQL and dynamic SQL)、授權(authorization)。
SQL中的DDL不僅能夠定義一組關系,還能夠定義每個關系的信息,包括:每個關系的模式、每個屬性的取值類型、完整性約束、每個關系維護的索引集合、每個關系的安全性和權限信息、每個關系在磁盤上的物理存儲結構。
SQL語句不詳述,多寫幾次就懂了。https://www.cnblogs.com/JHSeng/p/10714042.html
自然連接(natural join)運算作用於兩個關系,並產生一個關系作為結果。自然連接只考慮那些在兩個關系模式中都出現的屬性上取值相同的元組對。
被用來重命名關系的標識符在SQL標准中被稱作相關名稱(correlation name),也被稱作表別名(table alias)、相關變量(correlation variable)、元組變量(tuple variable)。
SQL作用在關系上的union、intersect和except運算對應於數學集合論中的並、交和差運算。
聚集函數是以值的一個集合(集或多重集)為輸入、返回單個值的函數。SQL提供了五個固有聚集函數:avg、min、max、sum、count(計數)。
SQL提供嵌套子查詢機制。子查詢是嵌套在另一個查詢中的select-from-where表達式。
SQL孕育測試元組在關系中的成員資格。連接詞in測試元組是否是集合中的成員,集合是由select子句產生的一組值構成的。連接詞not in則測試元組是否不是集合中的成員。
Chapter. 4 中級SQL
SQL提供了連接運算的其他形式,包括能夠指定顯式的連接謂詞(join predicate),能夠在結果中包含被自然連接排除在外的元組。
外連接(outer join)運算與我們已經學過的連接運算類似,但通過在結果中創建包含空值元組的方式,保留了那些在連接中丟失的元組。
外連接三種形式:左外連接(left outer join)、右外連接(right outer join)、全外連接(full outer join)。
左外連接只保留出現在左外連接運算之前的關系中的元組;右外連接只保留出現在右外連接運算之后的關系中的元組;全外連接保留出現在兩個關系中的元組。為了與外連接運算相區分,我們此前學習的不保留未匹配元素的連接運算被稱作內連接運算(inner join)。
右外連接和左外連接是對稱的。來自由此關系中的不匹配左側關系任何元組的元組被補上空值,並加入到右外連接的結果中。全外連接是左外連接與右外連接類型的組合。在內連接結果計算出來之后,左側關系中不匹配右側關系任何遠足的元組被添上空值並加到結果中。類似地,右側關系中不匹配左側關系任何元組的元組也被添上空值並加到結果中。全外連接是左外連接與右外連接類型的組合。在內連接結果計算出來之后,左側關系中不匹配右側關系任何遠足的元組被添上空值並加到結果中。類似地,右側關系中不匹配左側關系任何元組的元組也被添上空值並加到結果中。
為了把常規連接和外連接區分開來,SQL中把常規連接稱作內連接。這樣連接子句就可以用inner join來替換outer join,說明使用的是常規連接。
SQL允許通過查詢來定義“虛關系”,它在概念上包含查詢的結果。虛關系並不預先計算並存儲,而是在使用虛關系的時候才通過執行查詢被計算出來。作為虛關系對用戶可見的關系被稱為視圖(view)。師徒關系是在需要的時候才被創建的。特定數據庫系統允許存儲視圖關系而且保證:如果用於定義視圖的實際關系改變,視圖也跟着修改。這樣的視圖被稱為物化視圖(materialized view)。保持物化視圖一直在最新狀態的過程稱為物化視圖維護(materialized view maintenance),或者通常簡稱視圖維護(view maintenance)。
事務(transaction)由查詢和更新語句的序列組成。SQL標准規定當一條SQL語句被執行,就隱式地開始了一個事務。有兩條SQL語句會結束一個事務:Commit work(提交當前事務), Rollback work(回滾當前事務)。
完整性約束保證授權用戶對數據庫所做的修改不會破壞數據的一致性。完整性約束防止的是對數據的意外破壞,通常被看成是數據庫模式設計過程的一部分。
我們常常希望保證在一個關系中給定屬性集上的取值也在另一關系的特定屬性集的取值中出現,這種情況稱為參照完整性(referential integrity)。
一個斷言(assertion)就是一個謂詞,它表達了我們希望數據庫總能滿足的一個條件。域約束和參照完整性約束是斷言的特殊形式。
在關系的屬性上所創建的索引(index)是一種數據結構,它允許數據庫系統高效地找到關系中那些在索引屬性上取給定值的元組,而不用掃描關系中的所有元組。
SQL支持兩種形式的用戶定義數據類型。第一種稱為獨特類型(distinct type);另一種稱為結構化數據類型(structured data type)。允許創建具有嵌套記錄結構、數組和多重集的復雜數據類型。
當代數據庫系統提供了三層結構的關系命名機制。最頂層由目錄(catalog)構成,每個目錄都可以包含模式(schema)。諸如關系和視圖那樣的SQL對象都包含在模式中。
我們會給一個用戶在數據庫的某些部分授予幾種形式的權限,包括:讀取數據、插入新數據、更新數據、刪除數據。每種類型的授權都稱為一個權限(privilege)。SQL標准包括select、insert、update和delete權限。所有權限(all privileges)可以用作所有允許權限的簡寫形式。使用revoke語句來收回權限。
可以在數據庫中建立一個角色(role)集,給角色授予權限,就和給每個用戶授權的方式一樣,每個數據庫用戶被授予一組他有權扮演的角色。
Chapter. 5 && 6 高級SQL 形式化關系查詢語言
不考,但是數據庫實訓會用到。
Chapter. 7 數據庫設計和E-R模型
先概覽一遍數據庫設計過程。
- 設計階段
- 數據庫設計的最初階段需要完整地刻畫未來數據庫用戶的數據需求。
- 設計者選擇數據模型,並采用所選的數據模型的概念將這些需求轉化為數據庫的概念模式。
- 完善的概念模式還指明企業的功能需求。
- 從抽象數據模型到數據庫實現的轉換過程在最后兩個設計階段中進行:邏輯設計階段(logical-design phase)和物理設計階段(physical-design phase)。
- 設計選擇
用實體(entity)這個術語來知識所有可明確識別的個體。在設計一個數據庫模式的時候,必須確保避免兩個主要的缺陷:冗余和不完整。
實體-聯系(E-R)數據模型的提出旨在方便數據庫的設計,它是通過允許定義代表數據庫全局邏輯結構的企業模式實現的。它采用了三個基本概念:實體集、聯系集和屬性。
每個實體有一組性質,其中一些性質的值可以唯一地標識一個實體。
實體集是相同類型即具有相同性質或屬性的一個實體集合。實體集的外延(extension)來指屬於實體集的實體的實際集合。實體集不必互不相交。
實體通過一組屬性(attribute)來表示。屬性是實體集中每個成員所擁有的描述性性質。每個實體的每個屬性都有一個值。
聯系(relationship)是指多個實體間的相互關聯。聯系集是相同類型聯系的集合。實體集之間的關聯稱為參與。E-R模式中的一個聯系實例(relationship instance)表示在所建模的現實世界企業中命名實體間的一個關聯。實體在聯系中扮演的功能稱為實體的角色。
聯系也可以具有描述性屬性(descriptive attribute)。
參與聯系集的實體集的數目稱為聯系集的度(degree)。例如二元聯系集的度為2,三元聯系集的度為3。
每個屬性都有一個可取值的集合,稱為該屬性的域(domain),或者值集(value set)。
E-R模型中的屬性可以按照如下屬性類型進行划分:簡單(simple)和復合(composite)、單值(single-valued)和多值(multivalued)、派生(derived)屬性。
映射基數(mapping cardinality),或基數比率,表示一個實體通過一個聯系集能關聯的實體的個數。對於實體集A和B之間的二元聯系集R來說,映射基數必然是以下四種情況之一:一對一(ont-to-one)、一對多(one-to-many)、多對一(many-to-one)、多對多(many-to-many)。
如果實體集E中的每個實體都參與到聯系集R的至少一個聯系中,實體集E在聯系集R中的參與稱為全部(total)的,反之稱為部分(partial)的。
E-R圖包括如下幾個主要構件:
- 分成兩個部分的矩形代表實體集。
- 菱形代表聯系集。
- 未分割的矩形代表聯系集的屬性。
- 線段將實體集連接到聯系集。
- 虛線將聯系集屬性連接到聯系集。
- 雙線顯示實體在聯系集中的參與度。
- 雙菱形代表連接到弱實體集的標志性聯系集。
沒有足夠的屬性以形成主碼的實體集稱作弱實體集(weak entity set),有主碼的實體集稱作強實體集(strong entity set)。弱實體集必須與另一個稱作標識(identifying)或屬主實體集(owner entity set)的實體集關聯才能有意義。也就是說,弱實體集存在依賴(existence dependent)於標識實體集。將弱實體集與其標識實體集相連的聯系稱為標識性聯系(identifying relationship)。
對於多對多的二元聯系,參與實體集的主碼屬性的並集成為主碼;對於一對一的二元聯系集,任何一個實體集的主碼都可以選作主碼;對於一對多或多對一,多的那一方實體集的主碼做主碼。
在決定用實體集還是聯系集時可采用的一個原則是,當描述發生在實體間的行為時采用聯系集。
在實體集內部進行分組的過程稱為特化(specialization)。在E-R圖中描述特化的方法取決於一個實體集是否可能屬於多個特化實體集或者它是否必須屬於至多一個特化實體集。前者稱為重疊特化(overlapping specialization),后者稱為不相交特化(disjoint specialization)。特化關系還可能形成超類-子類(superclass-subclass)聯系。
從初始實體集到一系列不同層次的實體子集的細化代表了一個自頂向下(top-down)的設計過程,在這個設計過程中,顯式地產生出差別。設計過程也可以自底向上(bottom-up)進行,多個實體集根據共同具有的特征綜合成一個叫高層的實體集。
若兩個實體集包含相同的屬性,這種共性可以通過概化(generalization)來表達,概化是高層實體集與一個或多個低層實體集間的包含關系。
高層與低層實體集也可以分別稱作超類和子類。
由特化和概化所產生的高層和低層實體的一個重要特性是屬性繼承(attribute inheritance)。高層實體集的屬性被低層實體集集成(inherit)。低層實體集同事還繼承地參與其高層實體所參與的聯系集。和屬性繼承類似,參與繼承適用於所有低層實體集。
在層次結構(hierarchy)中,給定是實體集作為低層實體集只參與到一個ISA聯系中,即在這個圖中實體集只具有單繼承(single inheritance)。如果一個實體集作為低層實體集參與到多個ISA聯系中,則稱這個實體機具有多繼承g(multiple inheritance),且產生的結構稱為格(lattice)。
數據庫設計者可能選擇在特定概化上設置某些約束。一類約束包含判定哪些實體能稱為給定低層實體集的成員,成員資格可以為:條件定義的(condition-defined)、用戶定義的(user-defined)。另一類約束設計在一個概化中一個實體是否可以屬於多個低層實體集低層實體集可能是下屬情況之一:不相交(disjoint)、重疊(overlapping)。最后一類約束是對概化的完全性約束(completeness constraint),定義高層實體集中的一個實體是否必須至少屬於該概化/特化的一個低層實體集。這種約束可以使下屬情況之一:全部概化(total generalization)、部分概化(partial generalization)。
聚集(aggregation)是一種抽象,通過這種抽象,聯系被視為高層實體。
Chapter. 8 關系數據庫設計
如果某個表項x至多對應一個表項y,或存在一條規則“如果存在模式(x,y),則x可以作為主碼”,這條規則被定義為函數依賴(functional dependency):x→y。
分解有:有損分解(lossy decomposition)和無損分解(lossless decomposition)。
一個關系的滿足所有這種現實世界約束的實例,稱為關系的合法實例(legal instance)。
第一范式(1NF):關系模式R的所有屬性的域都是原子的(atomic),即該域的元素被認為是不可分割的單元。在任何一個關系型數據庫中,這是最基本的要求。
第二范式(2NF):首先滿足1NF。然后包含兩部分內容:一、表必須有一個主鍵;二、沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。
第三范式(3NF):首先滿足2NF。然后非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在如下情況:非主鍵列A依賴於非主鍵列B,非主鍵列B依賴於主鍵。
BC范式(boyce-codd NF, BCNF):首先滿足3NF。然后表中不存在關鍵字段決定關鍵字段的情況。
給定關系模式r(R),如果r(R)的每一個滿足F的實例也滿足f,則R上的函數依賴f被r上的函數依賴集F邏輯蘊涵(logically imply)。
Armstrong公理(Armstrong's axiom):自反律(reflexivity rule)、增補律(augmentation rule)、傳遞律(transitivity rule)。另外補上的規則有:合並律(union rule)、分解律(decomposition)、偽傳遞律(pseudotransitivity rule)。
如果a→B,稱屬性B被a函數確定(functionally determine)。如果取出函數依賴中的一個屬性不改變該函數以來即的閉包,則稱該屬性是無關的(extraneous)。
如果兩個關系模式r1(R1)和r2(R2)替代r(R)時沒有信息損失,則我們稱該分解是無損分解。
數據庫設計的一個期望的特性是唯一角色假設(unique-role assumption),意味着每個屬性名在數據庫中只有唯一的含義。
把一個規范化的模式變成非規范化的過程稱為去規范化(denormalization),設計者用它調整系統的性能以支持響應時間苛刻的操作。
時態數據(temporal data)是具有關聯的時間段的數據,在時間段之間數據有效。
Chapter. 9 && 10 應用設計與開發 存儲和文件結構
不考
Chapter. 11 索引與散列
兩種基本的索引類型:順序索引、散列索引。
用於在文件中查找記錄的屬性或屬性集稱為搜索碼(search key)。如果一個文件上有多個索引,那么它就有多個搜索碼。
如果包含記錄的文件按照某個搜索碼指定的順序排序,那么該搜索碼對應的索引稱為聚集索引(clustering index),也稱為主索引(primary index)。
搜索碼指定的順序與文件中記錄的物理順序不同的索引稱為非聚集索引(nonclustering index)或輔助索引(secondary index)。
索引項(index entry)或索引記錄(index record)由一個搜索碼值和指向具有該搜索碼值的一條或多條記錄的指針構成。順序索引有兩類:稠密索引(dense index)和稀疏(sparse index)索引。
稠密索引中,文件中的每個搜索碼值都有一個索引項,包括搜索碼值以及指向具有該搜索碼值的第一條數據記錄的指針。
只有當關系按照搜索碼排列順序存儲時才能使用稀疏索引,也就是說只有索引是聚集索引時才能使用稀疏索引。
一個包含多個屬性的搜索碼被稱為復合搜索碼(composite search key)。
索引順序文件組織最大的缺點在於,隨着文件的增大,索引查找性能和數據順序掃描性能都會下降。
B+樹索引結構是在數據插入和刪除的情況下仍能保持其執行效率的索引結構之一,采用平衡樹結構(balanced tree)。每個葉節點最多可有n-1個值,最少為ceil((n-1)/2)。非葉節點形成葉節點上的一個多級(稀疏)索引。一個非葉節點課容納最多n個指針,至少容納ceil(n/2)個指針。
假如一個關系可以擁有多個包含同一搜索碼值的記錄,那么該搜索碼稱為不唯一搜索碼(nonunique search key)。
覆蓋索引(covering index)存儲一些屬性(但不是搜索碼屬性)的值以及指向記錄的指針。
桶(bucket)表示能存儲一條或多條記錄的一個存儲單位。
令K表示所有搜索碼的集合,令B表示所有桶地址的集合,散列函數(hash function)h是一個從K到B的函數。在散列文件組織(hash file organization)中,通過計算所需記錄搜索碼值上的一個函數直接獲得包含該記錄的磁盤塊地址。
散列可以用於兩個不同的目的:在散列文件組織(hash file organization)中,通過計算所需記錄搜索碼值上的一個函數直接獲得包含該記錄的磁盤塊地址。在散列索引組織(hash index organization)中,我們把搜索碼以及與它們相關聯的指針組織成一個散列文件結構。
如果桶沒有足夠的空間,就會發生桶一處(bucket overflow)。桶溢出的原因:桶不足、偏斜(skew)。為了減少桶溢出的可能性,桶的數目選為(nr/fr)*(d+1)。其中d為避讓因子,典型值約為0.2。用溢出桶(overflow bucket)來處理桶溢出問題。使用鏈接列表的溢出處理稱為溢出鏈(overflow chaining)。以上散列結構稱為閉地址(close addressing),也叫閉散列(close hashing)。
另一種方法稱為開地址(open addressing),它的桶集合是固定的,沒有溢出鏈。當一個桶滿了以后,系統將記錄插入到初始桶集合B的其他桶中。一種策略是使用下一個有空間的桶,這個策略稱為線性探查法(linear probing)。
散列索引(hash index)將搜索碼及其相應的指針組織成散列文件結構。動態散列(dynamic hashing)允許散列函數動態改變,以適應數據庫增大或縮小的需要。
可擴充散列最主要的優點是其性能不隨文件的增長而降低。此外,其空間開銷是最小的。可擴充散列的一個缺點是在於查找設計一個附加的間接層,因為系統在訪問桶本身之前必須先訪問桶地址表。
位圖(bitmap)就是位的一個簡單數組。在其最簡單的形式中,關系r的屬性A上的位圖索引(bitmap index)是由A能取的每個值建立的位圖構成的。
Chapter. 12 查詢處理
加了“如何執行”注釋的關系代數運算稱為計算原語(evaluation primitive)。用於執行一個查詢的原語操作序列稱為查詢執行計划(query-execution plan)或查詢計算計划(query-evaluation plan)。查詢執行引擎(query-execution engine)接受一個查詢執行計划,執行該計划並把結果返回給查詢。
假設計算機中沒有其他活動在進行,那么一個查詢計算計划的響應時間(response time)(即執行計划所需的掛鍾時間)就是所有的這些開銷,並可以作為計划的代價的度量。因此,優化器通常努力去盡可能降低查詢計划總的資源消耗(resource consumption),而不是盡可能降低響應時間。
在查詢處理中,文件掃描(file scan)是存取數據最低級的操作,是用於定位、檢索滿足選擇條件的記錄的搜索算法。最簡單的方法是線性搜索。使用索引的搜索算法稱為索引掃描(index scan),包括:主索引和碼屬性等值比較、主索引和非碼屬性等值比較、輔助索引等值比較。
對不能全部放在內存中的關系的排序稱為外排序,最常用的技術是外部排序歸並算法(external sort-merge)。對N個歸並段進行排序的歸並排序稱為N路歸並(N-way merge)。
提兩個知識點:嵌套循環連接(nested-loop join)和塊嵌套循環連接(block nested-loop join)。
歸並連接(merge join)算法可用於計算自然連接和等值連接。
在計算多個運算的表達式時,把運算的中間結果物化(創建出來),然后用於下一層的計算,這種計算方法被稱為物化計算(materialized evaluation)。
Chapter. 13 查詢優化
這部分沒什么好講的,看書就好了,反正全是推導。
Chapter. 14 事務
事務(transaction)是訪問並可能更新各種數據項的一個程序執行單元。通常由高級數據操縱語言或編程語言通過JDBC或ODBC嵌入式數據庫訪問書寫的用戶程序的執行所引起。
事務特性:原子性(atomicity),隔離性(isolation),持久性(durability),一致性(consistency)。四個特性合稱為ACID特性(ACID property)。
事務並非總能成功地完成,這種事務被稱為中止(aborted)、一旦種質食物造成的變更被撤銷,我們就說事務已回滾(rolled back)。典型方法是維護一個日志(log)。一旦事務已經提交(committed),不能通過中止它來撤銷其造成的影響,唯一方法是執行一個補償事務。事務必須處於以下狀態之一:活動的(active)、部分提交的(partially committed)、失敗的(failed)、中止的(aborted)、提交的(committed)。系統判定事務不能繼續正常執行之后,事務就進入失敗狀態,這種事務必須回滾。這樣,事務就進入中止狀態。系統有兩種選擇:重啟事務或殺死事務。
命令的執行順序被稱為調度(schedule)。保證所執行的任何調度都能使數據庫處於一致狀態,這是數據庫系統的任務,負責完成此任務的是並發控制(concurrency-control)部件。
串行化順序(serializability order)可通過拓撲排序(topological sorting)得到。
事務隔離性級別:可串行化(serializable)、可重復讀(repeatable read)、已提交讀(read committed)、未提交讀(read uncommitted)。