我校使用Database System Concepts,9-12章不考所以跳過,因為課都逃了所以復習很倉促,只準備過一下每一章最后的概念辨析,我也不知道有沒有用
第1章 引言
- 數據庫管理系統(DBMS) 由一個互相關聯的數據的集合和一組用以訪問這些數據的程序組成。
- 數據庫系統應用:①高價值;②龐大;③多用戶訪問。
- 聯機事務處理即大量的用戶使用數據庫,每個用戶檢索相對少量的數據,進行小的更新。
- 數據分析即審閱數據,給出結論,并推導出規則或決策程序。
- 文件處理系統將數據永久存儲在不同的文件中的管理方式。
- 數據不一致性,即同一數據的不同副本不一致(文件處理系統的弊端,說人話就是改了一個忘了改別的)。
- 一致性約束,就是同一類數據是否合法的自動判斷(文件處理系統的弊端)。
- 數據抽象
- 物理層詳細描述復雜的底層數據結構。
- 邏輯層描述數據庫中存儲什么數據以及這些數據間存在什么聯系。
- 視圖層一個數據庫內有多個,使用戶和系統的交互更簡單。
- 實例(instance) :特定時刻存儲在數據庫中的信息的集合。
- 模式(schema) :數據庫的總體設計。
- 物理模式在物理層描述數據庫的設計。
- 邏輯模式在邏輯層描述數據庫的設計。
- 子模式:描述數據庫的不同視圖。
- 物理數據獨立性:在數據抽象的不同層級都不需要掌握其他層級的結構。
- 數據模型
- 關系模型用表的集合來表示數據和數據間的聯系。
- 實體-聯系模型使用稱作實體的基本對象的集合,以及這些對象間的聯系。
- 半結構化數據模型允許在其數據定義中某些相同類型的數據項含有不同的屬性集。
- 基于對象的數據模型可以看成對關系模型進行擴展,增加了封裝、方法和對象標識等概念。
- 數據庫語言
- 數據定義語言(DDL) 定義數據庫模式。
- 數據操縱語言(DML) 表達數據庫的查詢和更新。
- 過程化DML要求用戶指定需要什么數據以及如何獲得這些數據。
- 聲明式DML(也稱為非過程化DML)只要求用戶指定需要什么數據,而不必指明如何獲得這些數據。
- 查詢語言:DML中涉及信息檢索的部分。
- 數據定義語言
- 域約束指的就是數據類型。
- 引用完整性確保一個關系中的取值在另一個關系中也出現
- 授權
- 讀權限:可讀不能改
- 插入權限:可加新數據不可改已有的
- 更新權限:可改不能刪
- 刪除權限
- 元數據(metadata) 是關于數據的數據,說人話就是預處理出來的一個方便后續操作的類似目錄的東西。
- 應用程序就是用來以SQL查詢來訪問數據庫中的數據這種方式與數據庫進行交互的程序。
- 數據庫設計
- 概念設計涉及決定數據庫中應該包括哪些屬性,以及如何組織這些屬性到各個表中。
- 規范化將所有屬性集作為輸入,生成一組關系表的算法(見第8章)。
- 功能需求說明,用戶描述將在數據之上執行的各種操作(或事務)。
- 物理設計階段,在這個階段中說明數據庫的物理特性,包括文件組織的形式和內部的存儲結構。
- 數據庫引擎
- 存儲管理器是數據庫系統中負責在數據庫中存儲的低層數據與應用程序以及向系統提交的查詢之間提供借口的部件。
- 權限及完整性管理器檢測是否滿足完整性約束,并檢查視圖訪問數據的用戶的權限。
- 事務管理器保證即使系統發生了故障,數據庫也保持在一致的(正確的)狀態,并保證并發事務的執行不發生沖突。
- 文件管理器管理磁盤存儲空間的分配,管理用于表示磁盤上所存儲信息的數據結構。
- 緩沖區管理器負責將數據從磁盤上取到內存中,并決定那些數據應被緩沖存儲在內存中。
- 數據文件存儲數據庫自身。
- 數據字典存儲關于數據庫結構的元數據,特別是數據庫模式。
- 索引提供對數據項的快速訪問,就相當于很多現成能用的指針。
- 查詢處理器
- DDL解釋器解釋DDL語句并將這些定義記錄在數據字典中。
- DML編譯器將查詢語言中的DML語句翻譯為包括一系列查詢執行引擎能理解的低級指令的執行方案。
- 查詢優化就是從幾個候選執行計劃中選出代價最小的那個執行計劃。
- 查詢執行引擎執行由DML編譯器產生的低級指令。
- 事務是數據庫應用中完成單一邏輯功能的操作集合。
- 原子性:要么都發生,要么都不發生
- 一致性:數據變化前后的正確性
- 持久性:完成后就不會自己回退
- 恢復管理器:保證原子性和持久性
- 故障恢復:為保證原子性,失敗要回退
- 并發控制管理器:控制并發事物間的影響
- 存儲管理器是數據庫系統中負責在數據庫中存儲的低層數據與應用程序以及向系統提交的查詢之間提供借口的部件。
- 數據庫體系結構
- 集中式的:所有數據集中存儲在一個中心節點,便于管理和維護,但可能受限于單個節點的性能和容量。
- 并行的:利用多個CPU協同工作,提高數據處理能力和系統吞吐量,適用于大規模數據處理和高性能需求。
- 分布式的:數據分散存儲在多個節點上,實現跨地域的數據共享和訪問,具有高可用性和易于擴展的特點。
- 數據庫應用體系結構
- 兩層的:應用程序駐留在客戶機上,通過查詢語言語句調用數據庫功能。
- 三層的:客戶機僅作為一個前端,沒有任何直接的數據庫調用。
- 應用服務器:計算在何種條件下做出何種反應。
- 數據庫管理員(DBA) 是對系統進行集中控制的人。
第2章 關系模型介紹
- 表(table) :就是表格唄
- 關系(relation) :表在關系模型中的高級表述
- 元組(tuple) :行在關系模型中的高級表述
- 屬性(attribute) :列在關系模型中的高級表述
- 關系實例(relation instance) :指代一個關系的特定實例(也就是選中某一行)
- 域(domain) :對于關系的每個屬性存在的一個允許取值的集合
- 原子域(atomic domain) :不可再分的單元組成的域
- 空值(null value) 是一個特殊的值,表示值未知或不存在。
- 數據庫模式(database schema) 指數據庫的邏輯設計。
- 數據庫實例(database instance) 是在給定時刻數據庫中數據的一個快照。
- 關系模式(relation schema) 的概念對應于程序設計語言中類型定義的概念。
- 碼是一種用來區分一個給定關系中的不同元組的方式。
- 超碼(superkey) 是一個或多個屬性的集合。
- 候選碼(candidate key) 是最小的超碼。
- 主碼(primary key,又稱主碼約束) 代表被數據庫設計者選中來作為在一個關系中區分不同元組的主要方式的候選碼,說人話就是每一行的主碼都不一樣,是對每一行來說唯一的編號之類的。
- 外碼約束
- 從 r 1 r_1 r1?關系的 A A A屬性(集)到 r 2 r_2 r2?關系的主碼 B B B的外碼約束(foreign-key constraint) 表明:在任何數據庫實例中, r 1 r_1 r1?中每個元組對 A A A的取值也必須是 r 2 r_2 r2?中某個元組對 B B B的取值。 A A A屬性集被稱為從 r 1 r_1 r1?引用 r 2 r_2 r2?的外碼(foreign key) 。 r 1 r_1 r1?關系也被稱為此外碼約束的引用關系(referencing relation) ,且 r 2 r_2 r2?被稱為被引用關系(referenced relation) 。
- 講人話就是說假如現在有個公司,把員工的住址和工資分成兩個表,那么這兩個表里面一定都有
員工姓名
這一列對吧,而且這一列一定是一一對應的,那這一列就是外碼了。
- 引用完整性約束(referential integrity constraint) 要求引用關系中的任意元組在指定屬性上出現的取值也必然出現在被引用關系中至少一個元組的指定屬性上。
- 模式圖(schema diagram) 用來表示一個帶有主碼和外碼約束的數據庫模式。
- 查詢語言類型(query language)
- 命令式(imperative)查詢語言中,用戶指導系統在數據庫上執行特定的運算序列以計算出所需的結果。
- 函數式(functional)查詢語言中,計算被表示為對函數的求值,這些函數可以在數據庫中的數據上運行或在其他函數給出的結果上運行。
- 聲明式(declarative)查詢語言中,用戶只需描述所需信息,而不用給出獲取該信息的具體步驟序列或函數調用,所需的信息通常使用某種形式的數學邏輯來描述。
第3章 SQL介紹
- 數據定義語言提供定義關系模式、刪除關系以及修改關系模式的命令。
- 數據操縱語言提供從數據庫中查詢信息以及在數據庫中插入元組、刪除元組、修改元組的能力。
- SQL查詢結構
- select子句(單關系查詢):可以查用
select name from instructor;
看instructor
表中的name
列的所有內容- 在select后面加distinct表示去重
- 在select后面加all表示不去重(默認也是不去重)
- 可以一次select多列
- 后面的列名可以加數學運算符
- from子句:表示你要在哪個表里面查
- where子句:可以加條件判斷,表示只有滿足條件的行的內容才會被選
- select子句(單關系查詢):可以查用
- 多重集關系代數(multiset relational algebra) 是一種運算(不細究底層內容,可以自己看P45的注釋3-1)
- as子句是一種重命名結果關系中屬性的方式,說人話就是給顯示的結果的列改個顯示的名字
- order by子句可以讓查詢結果中的元組按排列順序顯示。
- desc表示降序
- asc表示升序
- 寫在前面的優先級更高,比如
order by salary desc, name asc;
表示先按工資降序排列,如果工資相等按照姓名升序排列
- 表別名(table alias)/相關名稱(correlation name)/相關變量(correlation variable)/元組變量(tuple variable) 就是as子句里面你改的那個名字
- 集合運算:SQL作用在關系上的union、intersect、except運算對應于數學集合論中的 ∪ ∪ ∪、 ∩ ∩ ∩、 ? - ?運算
- 并(union) ,兩個完整的語句加個括號中間用union連接就可以用了
- 默認去重,不去重要在union后面加all
- 交(intersect) ,用法一樣
- 如果加all的話也是表示不去重,但是不是說本來出現3次和4次我顯示7次,會按照少的那邊顯示,也就是3次,但是你不加all的話只會顯示1次
- 差(except)
- 假如一個項目分別出現6次和3次,如果不加all則會顯示0次,如果加了就會顯示3次
- 并(union) ,兩個完整的語句加個括號中間用union連接就可以用了
- 聚集函數(aggregate function) 是以值集(集合或多重集合)為輸入并返回單個值的函數。
- SQL提供了五個標準的固有聚集函數
- 平均值:avg
- 最小值:min
- 最大值:max
- 總和:sum
- 計數:count
- group by子句可以將聚集函數作用在一組元組集上
- having子句可以對分組限定條件
- SQL提供了五個標準的固有聚集函數
- 嵌套子查詢:子查詢是嵌套在另一個查詢中的
select-from-where
表達式。- 一個完整的表達式用括號括起來就可以當成一個表給別人進行其他的查詢
- 集合比較
- {<,<=,>,>=} {some,all}
- 比如
where T.salary > S.salary and S.dept_name='Biology'
表示工資比生物系某位老師的工資高的所有老師的姓名 - some表示‘至少比某一個要大’,all表示‘比所有的都大’
- 比如
- exists結構在作為參數的子查詢非空時返回true值
- unique結構在作為參數的子查詢結果中沒有重復的元組時返回true值
- {<,<=,>,>=} {some,all}
- lateral子句:從SQL:2003開始的SQL標準允許from子句中的子查詢用關鍵字lateral作為前綴,以便訪問同一個from子句中在它前面的表或子查詢的屬性。說人話就是括號里面的那個查詢的結果也會輸出出來。
- with子句提供了一種定義臨時關系的方式,這個定義只對包含with子句的查詢有效
- 標量子查詢:只返回一個包含單個屬性的元組的可以出現在表達式任何地方的子查詢。
- 數據庫修改
- 刪除請求的表達方式與查詢非常相似,只能刪除整個元組而不能刪除某些屬性上的值。
delete from r where P;
表示滿足條件P的行全部刪掉。
- 插入
insert into
起手,后面是value
接括號,默認按列順序,要修改的話就要在表名后面加括號表示第幾個在哪一列- 還可以直接將select的結果insert進需要的地方
- 更新
update p set q where r
表示在p表內滿足調節r的全部進行q更新
- 刪除請求的表達方式與查詢非常相似,只能刪除整個元組而不能刪除某些屬性上的值。
第4章 中級SQL
- 連接類型
- 自然連接(natural join) 運算作用于兩個關系,并產生一個關系作為結果。具體來說,
select name,course_id from student,takes where student.ID=takes.ID;
等價于select name,course_id from student natural join takes;
。 - 帶using和on的內連接
- using是用來在上面的自然連接里面人工選擇一個共有的列作為判斷依據
- on跟where差不多,在連接的時候加一個條件判斷
- 左外連接、有外連接和全外連接
- 左外連接(left outer join) 只保留出現在左外連接運算之前(左邊)的關系中的元組。
- 右外連接只保留出現在右外連接運算之后(右邊)的關系中的元組。
- 全外連接(full outer join) 保留出現在兩個關系中的元組。
- 自然連接(natural join) 運算作用于兩個關系,并產生一個關系作為結果。具體來說,
- 視圖定義
- 物化視圖保證如果用于定義視圖的實際關系發生改變,則視圖也跟著修改以保持最新。
- 物化視圖維護(materialized view maintenance,簡稱視圖維護) 指保持物化視圖一直在最新狀態的過程。
- 視圖更新:一般來說想看到一個視圖就對數據庫本身進行修改很麻煩,所以要滿足很多的條件。
- from子句中只有一個數據庫關系。
- select子句中只包含關系的屬性名,并不包含任何表達式、聚集或distinct聲明。
- 沒有出現在select子句中的任何屬性都可以取null值;也就是說,這些屬性沒有非空約束,也不構成主碼的一部分。
- 查詢中不含有group by或having子句。
- 事務(transaction) 由查詢和(或)更新語句的序列組成。
- commit work提交當前事務;也就是說,它使事務執行的更新在數據庫中成為永久性的。
- rollback work回滾當前事務;也就是說,它會撤銷事務中SQL語句執行的所有更新。
- 一個事物或者在完成所有步驟后提交其操作,或者在不能成功完成其所有動作的情況下回滾其所有動作,通過這種方式數據庫提供了對事物具有原子性的抽象。
- 約束
- 完整性約束保證授權用戶對數據庫所做的修改不會導致數據一致性的丟失。
- 域約束就是對域中內容的范圍進行的約束,比如非空或者大于0之類的。
- 唯一性約束要求在關系中沒有兩個元組能在所有列出的屬性上取值相同。
- check子句指定一個謂詞P,關系中的每個元組都必須滿足謂詞P,用于關系聲明。
- 引用完整性:保證一個關系中給定屬性集合的取值也在另一個關系中特定屬性集的取值中出現。
- 級聯刪除可以要求數據庫在被引用關系上的刪除或更新操作違反了約束的條件下不拒絕這樣的操作而是采取一些措施來改變引用關系中的元組以恢復完整性約束。
- 級聯更新?指在數據庫中,當一個表中的關聯字段被修改時,這個修改會自動應用到與之關聯的其他表中,從而確保數據庫的數據完整性和一致性。
- 斷言(assertion) 就是一個謂詞,它表達了我們希望數據庫總能滿足的一個條件。
- 數據類型
- 日期和時間類型
date '2018-04-25
time '09:30:30'
timestamp '2018-04-25 10:29:01.45'
- 缺省(default)值,定義的時候可以設置默認值。
- 大對象:后面跟括號限制文件最大大小
- 字符大對象數據類型(clob)
- 二進制大對象數據類型(blob)
- 用戶自定義類型
- 獨特模型(distinct type) 用create type來定義,其實就跟c++里面的typedef差不多
- 結構化數據類型(本書不細究)
- 域:數據范圍
- 類型轉換:顯式轉換用
cast(e as t)
來表示將表達式e轉換為類型t。
- 日期和時間類型
- 目錄構成體系結構的最頂層。
- 模式包含在目錄中。
- 索引在關系屬性上是一種數據結構,允許數據庫系統高效地找到在關系中具有該屬性指定值的那些元組,而不掃描關系的所有元組。
- 權限
- 權限類型
- 選擇(select)
- 插入(insert)
- 更新(update)
- 授予權限:
grant <權限名> on <關系名或視圖名> to <用戶/角色列表>;
- 收回權限:
revoke <權限名> on <關系名或視圖名> to <用戶/角色列表>;
- 授予權限的權限:
grant <權限名> on <關系名或視圖名> to <用戶/角色列表> with grant option;
- grant option子句
- 權限類型
- 角色用于標識數據庫用戶。
- 視圖授權:只能看部分列
- 執行授權:允許查詢和更新
- 調用者權限:使用當前用戶的權限執行代碼,適用于分布式數據管理,允許不同的用戶在不同的環境中執行相同的代碼,而不需要修改代碼的權限設置?。
- 行級授權:在特定元組或行的級別上的授權
- **虛擬私有數據庫(VPD)**支持行級授權
第5章 高級SQL
- JDBC(Java數據庫連接) 標準定義了用于將Java程序連接到數據庫服務器的應用程序接口(API) 。
- 預備語句用“?”來代替某些值,以此指明以后會提供實際的值。
- SQL注入是一種被惡意黑客用來竊取數據或損壞數據庫的技術。
- 元數據就是定義數據結構的數據。
- 可更新結果集可以根據在數據庫關系上執行選擇或投影的查詢來創建出可更新的結果集。
- **開放數據庫連接(ODBC)**標準定義了一個API,應用程序可以用它來打開與一個數據庫的連接、發送查詢和更新并獲取返回結果。
- 嵌入式SQL:SQL標準定義了將SQL嵌入各種程序設計語言中的方法。嵌入了SQL查詢的語言被稱為宿主(host)語言,并且在宿主語言中允許使用的SQL結構構成了嵌入式SQL。
- 嵌入式數據庫當應用程序僅為內部使用而維護數據庫,并且除非通過應用程序本身,否則無法訪問到數據庫的情況下可以使用。
- 存儲過程和函數是在數據庫中定義的一組完成特定功能的SQL語句集合,經過編譯后存儲在數據庫中。
- 表函數:支持以返回表作為結果的函數。
- 參數化視圖:以表為值的函數通常可以看作這個,通過允許參數來泛化常規的視圖概念。
- 持久存儲模塊(PSM) 是SQL標準中處理賦予通用程序設計語言幾乎所有能力的模塊。
- SQL的過程化語言還支持對異常情況(exception condition) 的信號發送。
- 句柄(handler) 聲明對異常的處理。
- 外部語言例程可以作為外部代碼主體被引用,用于數據庫操作和數據處理?。
- 沙盒允許Java或C#代碼來訪問它自己的內存區域,但它組織代碼讀取或更新查詢執行進程的內存,或者訪問文件系統的文件。
- 觸發器是作為對數據庫修改的連帶效果而由系統自動執行的一條語句。
- 傳遞閉包?指在關系數據庫中描述相同元素之間的可傳遞關系的運算。
- 層次結構指數據庫中的數據按照樹狀結構組織,每個節點代表一個數據項,節點之間的關系通過父節點和子節點的關系來定義。
- 創建臨時表創建的表僅在執行查詢的事務內部才可用,并隨事務的完成而被刪除。
- 基查詢指在數據庫中通過特定的語句和語法,向數據庫提出問題并獲取相應的數據的過程。
- 遞歸查詢指在一個查詢中,通過使用遞歸操作或遞歸SQL語句,對查詢結果進行多次處理,以獲取滿足特定條件的數據?。
- 不動點指不會再有進一步變化。
- 單調的:如果更多的元組被添加到視圖關系中,則遞歸查詢必須返回至少與以前相同的元組集。
- 分窗指在數據庫管理系統中,將數據表分割成兩部分,一部分用于顯示數據,另一部分用于顯示圖形或圖片,從而提供更人性化的數據展示和輸入方式。
- 排名函數主要用于對查詢結果進行排序,并為每行數據分配一個排名。
- 交叉表/數據透視表是一種用于數據匯總和分析的矩陣格式表格,主要用于顯示兩個或多個變量之間的頻率分布關系。
- 旋轉就是將結果集中的某一列數據以行的形式來顯示原有的數據信息,即交叉表。
- SQL group by cube,group by rollup是用于支持group by結構泛化形式的操作。
第6章 形式化關系查詢語言
- 關系代數由一組運算組成,這些運算接受一個或兩個關系作為輸入,并生成一個新的關系作為它們的結果。
- 關系代數表達式是關系代數在數據庫查詢中的應用,用于描述從一個或多個關系(即表)中提取和組合數據的過程。
- 關系代數運算
- 選擇 σ σ σ 運算選出滿足給定謂詞的元組,如 σ d e p t n a m e = " P h y s i c s " ( i n s t r u c t o r ) σ_{dept_name="Physics"}(instructor) σdeptn?ame="Physics"?(instructor)表示在instructor表中選擇dept_name為Physics的元組。
- 投影 Π \Pi Π 運算是一種一元運算,返回它的參數關系,但濾掉了特定的屬性,如 Π I D , n a m e , s a l a r y ( i n s t r u c t o r ) \Pi_{ID,name,salary}(instructor) ΠID,name,salary?(instructor)就會列出instructor表中的所有元組但不顯示dept_name列。
- 笛卡爾積 × × × 允許我們結合來自任意兩個關系的信息。
- 連接 ? ? ? 運算使我們能夠將選擇與笛卡爾積合并到單個運算中, σ i n s t r u c t o r , I D = t e a c h e s . I D ( i n s t r u c t o r × t e a c h e s ) σ_{instructor,ID=teaches.ID}(instructor×teaches) σinstructor,ID=teaches.ID?(instructor×teaches)可以等價地寫為 i n s t r u c t o r ? i n s t r u c t o r , I D = t e a c h e s . I D t e a c h e s instructor ?_{instructor,ID=teaches.ID} teaches instructor?instructor,ID=teaches.ID?teaches。
- 并 ∪ ∪ ∪ 是一種二元運算,表示出現在這兩個關系之一或同時出現在這兩個關系中的所有元組。
- 集差 ? - ? 使我們能夠找到在一個關系中但不在另一個關系中的元組。
- 交 ∩ ∩ ∩ 允許我們找到同時出現在兩個輸入關系中的元組。
- 賦值 ← \leftarrow ← 的工作方式與程序設計語言中的賦值是類似的。
- 更名 ρ ρ ρ 用于給關系代數表達式的結果命名。
- 元組關系演算是非過程化的(nonprocedural) 查詢語言。它描述了所需信息,而不給出用于獲得該信息的具體過程。
- 域關系演算是關系演算的第二種形式,它使用從屬性域中取值的域變量,而不是對于整個元組的值。
- 表達式的安全性要求表達式不產生無限關系或者是超出域的范圍。
- 語言的表達能力:僅限于安全表達式的元組關系演算在表達能力上等價于基本關系代數。
第7章 使用E-R模型的數據庫設計
- 設計過程
- 概念設計階段所產生的模式提供了對企業的詳細概覽。
- 邏輯設計階段中,設計者將高層概念模式映射到將被使用的數據庫系統具體實現的數據模型。
- 物理設計階段中,數據庫的物理特性被具體說明,這些特性包括文件組織形式和索引結構的選擇。
- 實體-聯系(E-R)數據模型被開發來方便數據庫的設計,它是通過允許定義代表數據庫全局邏輯結構的企業模式(enterprise schema)來做到的。
- 實體和實體集
- 簡單和復合屬性:依據能不能劃分為子部分區分
- 單值和多值屬性:如果對一個特定實體而言,一個屬性可能對應于一組值那就是多值的
- 派生屬性:這類屬性的值可以從其他相關屬性或實體的值派生出來
- 碼是一種用來區分一個給定關系中的不同元組的方式。
- 超碼是一個或多個屬性的集合。
- 候選碼是最小的超碼。
- 主碼代表被數據庫設計者選中來作為在一個關系中區分不同元組的主要方式的候選碼。
- 聯系是多個實體間的相互關聯,聯系集是相同類型聯系的集合。
- 二元聯系集涉及兩個實體集的聯系集,在數據庫系統中,大多數聯系集都是二元的。
- 聯系集的度指參與聯系集的實體集的數目。
- 描述性屬性是指在聯系集中,用于描述聯系本身或參與聯系的實體之間關系的屬性。
- 超碼、候選碼和主碼
- 角色用于標識數據庫用戶。
- 遞歸聯系集是指在遞歸聯系中,由遞歸聯系形成的集合。
- E-R圖提供了表示實體類型、屬性和聯系的方法,用來描述現實世界的概念模型。
- 映射基數
- 一對一關系: A A A中的一個實體至多與 B B B中的一個實體相關聯,并且 B B B中的一個實體也至多與 A A A中的一個實體相關聯。
- 一對多關系: A A A中的一個實體可以與 B B B中的任意數量(零個或多個)的實體相關聯,而 B B B中的一個實體至多與 A A A中的一個實體相關聯。
- 多對一關系:: A A A中的一個實體至多與 B B B中的一個實體相關聯,而 B B B中的一個實體可以與 A A A中任意數量(零個或多個)的實體相關聯。
- 多對多關系: A A A中的一個實體可以與 B B B中的任意數量(零個或多個)的實體相關聯,而 B B B中的一個實體可以與 A A A中任意數量(零個或多個)的實體相關聯。
- 全部參與和部分參與看實體集中是否每個實體都必須參與到聯系集中的至少一個聯系中。
- 弱實體集和強實體集:弱實體集(weak entity set) 的存在依賴于另一個實體集,稱為其標識性實體集(identifying entity set) ;我們使用標識性實體集的主碼以及成為分辨符屬性(discriminator attribute) 的額外屬性來唯一地標識弱實體,而不是將主碼與弱實體相關聯。非弱實體集被稱為強實體集(strong entity set) 。
- 特化和概化
- 特化將一個屬性分割為幾個部分,比如原本的student可以分成本科生和研究生這樣。
- 概化是在一個高層實體集與一個或多個低層實體集之間存在的包含聯系。
- 聚集是一種抽象,通過這種抽象,聯系被視為高層實體。
- 設計選擇是指在構建數據庫時需要考慮的一系列關鍵因素和決策。
- 統一建模語言(UML) 是由對象管理組織主持開發的一個標準,用于建立軟件系統不同部分的規范定義。
第8章 關系數據庫設計
- 分解用于將表現出信息重復的模式分解成幾個較小的模式。
- 有損分解指分解后雖然我們擁有更多的元組,但是實際上從一下意義來講我們卻擁有更少的信息。
- 無損分解指那些沒有信息丟失的分解。
- 規范化的目標是生成一組關系模式,允許我們存儲信息并避免不必要的冗余,同時還允許我們輕松地檢索信息。
- 函數依賴是指在一個關系表中,一個或多個屬性的值(決定因素)決定了其他屬性的值(被決定因素)?。
- 成立:把注意力放到模式 r ( R ) r(R) r(R)上滿足函數依賴集 F F F的關系,我們說 F F F在 r ( R ) r(R) r(R)上成立。
- 平凡指函數依賴被所有關系滿足。
- R滿足F:關系R的所有屬性集合U上的元組滿足函數依賴集F中的所有函數依賴規則。
- 函數依賴集的閉包記作 F + F^{+} F+,表示能夠從給定的集合 F F F推導出的所有函數依賴的集合。
- 保持依賴(dependency preserving) 要求允許在沒有連接的情況下強制實施這種函數依賴。
- 傳遞依賴是函數依賴的一種特殊形式,描述了屬性之間的間接依賴關系。
- 邏輯蘊涵:給定一個關系模式 r ( R ) r(R) r(R),如果關系 r ( R ) r(R) r(R)的每一個滿足 F F F的實例也滿足 f f f,則 R R R上的函數依賴 f f f被 R R R上的函數依賴集 F F F所邏輯蘊涵。
- 公理(axiom) 或推理規則提供了一種用于對函數依賴進行推理的更為簡單的技術。
- 阿姆斯特朗公理:通過反復應用以下這三條規則,可以找出對于給定 F F F的 F + F^{+} F+中的全部依賴。
- 自反律:若 α α α為一個屬性集且 β ? α β?α β?α,則 α → β α\rightarrow β α→β成立。
- 增補律:若 α → β α\rightarrow β α→β成立且 γ γ γ為一個屬性集,則 γ α → γ β γα\rightarrow γβ γα→γβ成立。
- 傳遞律:若 α → β α\rightarrow β α→β成立且 β → γ β\rightarrow γ β→γ,則 α → γ α\rightarrow γ α→γ成立。
- 阿姆斯特朗公理是有效的,因為它們不會產生任何不正確的函數依賴。這些規則是完備的,因為對于一個給定的函數依賴集 F F F,它們能允許我們產生全部 F + F^{+} F+。
- 函數決定的:如果 α → B α\rightarrow B α→B,我們就稱屬性 B B B被 α α α函數決定。
- 無關屬性的形式化定義如下:考慮一個函數依賴集 F F F以及 F F F中的函數依賴 α → β α\rightarrow β α→β。
- 從左側移除:如果 A ∈ α A∈α A∈α并且 F F F邏輯蘊含 ( F ? { α → β } ) ∪ { ( α ? A ) → β } (F-\{α\rightarrow β\})∪\{(α-A)\rightarrow β\} (F?{α→β})∪{(α?A)→β},則屬性 A A A在 α α α中是無關的。
- 從右側移除:如果 A ∈ β A∈β A∈β并且函數依賴集 ( F ? { α → β } ) ∪ { α → ( β ? A ) } (F-\{α\rightarrow β\})∪\{α\rightarrow (β-A)\} (F?{α→β})∪{α→(β?A)}邏輯蘊涵 F F F,則屬性 A A A在 β β β中是無關的。
- F F F的正則覆蓋 F c F_c Fc?是這樣的一個依賴集: F F F邏輯蘊含 F c F_c Fc?中的所有依賴,并且 F c F_c Fc?邏輯蘊含 F F F中的所有依賴。此外, F c F_c Fc?必須具備如下性質:
- F c F_c Fc?中任何函數依賴都不包含無關屬性。
- F c F_c Fc?中每個函數依賴的左側都是唯一地。也就是說,在 F c F_c Fc?中不存在兩個依賴 α 1 → β 1 α_1\rightarrow β_1 α1?→β1?和 α 2 → β 2 α_2\rightarrow β_2 α2?→β2?,滿足 α 1 = α 2 α_1=α_2 α1?=α2?。
- F F F對 R i R_i Ri?的限定意味著在關系 R i R_i Ri?(即某個表)上應用約束 F F F。
- 保持依賴的分解:具有性質 F ′ + = F + F^{'+}=F^{+} F′+=F+的分解。
- Boyce-Codd范式(BCNF) :關系模式 R ∈ 1 N F R∈1NF R∈1NF。若函數依賴集合F中的所有函數依賴 X → Y X\rightarrow Y X→Y( Y Y Y不包含于 X X X)的左部都包含R的任一候選鍵,則 R ∈ B C N F R∈BCNF R∈BCNF。換言之,BCNF中的所有依賴的左部都必須包含候選鍵。
- BCNF分解算法所花費的時間與初始模式的規模呈指數分布,因為用于檢查分解中的一個關系是否滿足BCNF的算法可能花費指數級的時間。
- 第三范式(3NF) 指表中的所有數據元素不但要能唯一地被主關鍵字所標識,而且它們之間還必須相互獨立,不存在其他的函數關系。
- 3NF分解算法指將一個復雜的關系模式分解成多個符合3NF的較簡單的關系模式?。
- 3NF合成算法用于將關系模式分解成滿足3NF的模式集,確保無損分解并保持函數依賴。
- 多值依賴:多值依賴 α → → β α→→β α→→β是說 α α α和 β β β之間的聯系獨立于 α α α和 R ? β R-β R?β之間的聯系。
- 函數依賴有時被稱為相等產生依賴,而多值依賴被稱為元組產生依賴。
- 嵌入的多值依賴指函數依賴 X → → Y X→→Y X→→Y在模式R上不成立,但是在 R R R的子模式 W W W上成立,則稱 X → → Y X→→Y X→→Y為 R R R上的嵌入型多值依賴。
- 第四范式(4NF) 要求關系模式中的每個非平凡多值依賴必須滿足以下條件:如果關系模式R的每個非平凡多值依賴 X → → Y ( Y ? X ) X→→Y(Y ? X) X→→Y(Y?X),其中X必須包含候選碼。如果關系模式滿足4NF,則它也必然滿足BCNF。
- D D D對 R i R_i Ri?的限定是集合 D i D_i Di?,它包含:
- D + D^{+} D+中只含 R i R_i Ri?中屬性的所有函數依賴。
- 所有形如 α → → β ∩ R i α\rightarrow \rightarrow β∩R_i α→→β∩Ri?的多值依賴,其中 α ? R i α? R_i α?Ri?且 α → → β α\rightarrow \rightarrow β α→→β屬于 D + D^+ D+。
- 更多的范式(僅提一下名字) :投影-連接范式、連接依賴、第五范式、域-碼范式、第二范式。
- 原子域要求域的元素被認為是不可再分的單元。
- 第一范式(1NF) 要求關系模式的所有屬性的域都是原子的。
- 唯一角色假設是數據庫設計的一個期望的特性,意味著每個屬性名在數據庫中只有唯一的含義。
- 去規范化指把一個規范化的模式變成非規范化的過程。
- 交叉表指一個屬性的每一個值作為一列的表示方法。
- 時態數據是具有關聯的時間區間的數據,時間區間內的數據是有效(valid) 的。
- 快照用來表示特定時刻的數據值。
- 時態函數依賴 α → τ β α\stackrel{\tau}{\rightarrow}β α→τβ在關系模式 r ( R ) r(R) r(R)上成立的條件是:對于 r ( R ) r(R) r(R)的所有合法實例, r r r的所有快照都滿足函數依賴 α → β α\rightarrow β α→β。
- 時態主碼 r . A r.A r.A成立要求,只要 r r r中的兩個元組 t 1 t_1 t1?和 t 2 t_2 t2?使得 t 1 . A = t 2 . A t_1.A=t_2.A t1?.A=t2?.A,它們的有效時間區間 t 1 t_1 t1?和 t 2 t_2 t2?必然不會重疊。
- 形式化地,從 r . A r.A r.A到 s . B s.B s.B的時態外碼約束確保了一下內容:對于 r r r中具有有效時間 ( l , u ) (l,u) (l,u)的每個元祖 t t t,在 s s s中存在一個或多個元組構成的一個子集 s t s_t st?,使得每個元祖 s i ∈ s t s_i∈s_t si?∈st?都有 s i . B = t . A s_i.B=t.A si?.B=t.A,并且保證所有 s i s_i si?的時間區間的并集包含 ( l , u ) (l,u) (l,u)。
- 時態連接:在連接結果中一個元組的有效時間被定義為派生出該元組的輸入元組的有效時間的交集。
第13章 事務管理
- 事務(transaction) 是訪問并可能更新各種數據項的一個程序執行單元。
- ACID特性這一縮寫來源于四種特性的英文首字母。
- 原子性。事務的所有操作在數據庫中要么全部正確反映出來,要么完全不反映。
- 一致性。以隔離方式執行事務(即,沒有其他事物的并發執行)以保持數據庫的一致性。
- 隔離性。盡管多個事務可能并發執行,但每個事務都感覺不到系統中有其他事務在并發地執行。
- 持久性。在一個事務成功完成之后,它對數據庫的改變必須是永久的,即使出現系統故障也是如此。
- 不一致狀態指系統的狀態由于故障不再反映數據庫本應描述的現實世界的真實狀態。