Ch04 關聯式資料庫 資料庫管理
本章大綱 本章內容包含課本第9章 關聯式資料庫模型 關聯式資料庫 關聯式資料庫設計
關聯式資料庫模型-說明 關聯式資料庫模型(Relational Database Model)是1969年E. F. Codd博士在IBM公司的研究成果,不同於其它資料庫模型,關聯式資料庫模型是以數學集合論為理論基礎建立的資料庫模型。
關聯式資料庫模型-元素 資料結構(Data Structures):資料的組成方式,以關聯式資料庫模型來說,就是欄和列組成表格的關聯表(Relations)。 資料操作或運算(Data Manipulation或Operations):資料相關操作新增、更新、刪除和查詢的關聯式代數(Relational Algebra)和關聯式計算(Relational Calculus)。 完整性限制條件(Integrity Constraints):維護資料完整性的條件,其目的是確保儲存的資料是合法資料。
關聯式資料庫模型-名詞 關聯式資料庫模型的相關術語通常是用來說明資料庫系統的相關理論,SQL Server或Access等資料庫管理系統使用的資料庫相關名詞另成一套術語,不過這些名詞或術語都代表相同意義,如下表所示:
關聯式資料庫模型的資料結構-說明 關聯式資料庫是一組關聯表(Relations)的集合,關聯表是關聯式資料庫模型的資料結構(Data Structures),使用二維表格組織資料。每一個關聯表是由2部分組成,如下圖所示:
關聯式資料庫模型的資料結構-關聯表綱要 關聯表綱要(Relation Schema) 關聯表綱要主要是指關聯表名稱、關聯表屬性(欄位)和定義域清單(資料類型),多個關聯表綱要集合起來就是「關聯式資料庫綱要」(Relational Database Schema)。
關聯式資料庫模型的資料結構-關聯表綱要語法 關聯表Students擁有sid、name、address、tel和birthday屬性(欄位)集合,關聯表綱要表示法的語法,如下所示: relation_name (attribute1, attribute2, attribute3, … , attributeN) 上述語法的說明,如下所示: relation_name:關聯表名稱。 attribute1, attribute2, attribute3, …. , attributeN:括號中是屬性清單,通常省略屬性的定義域,加上底線的屬性就是主鍵。
關聯式資料庫模型的資料結構-關聯表實例 關聯表實例(Relation Instance) 在定義好關聯表綱要後,我們就可以將資料儲存到關聯表,稱之為關聯表實例(Relation Instance),這是指某個時間點儲存在關聯表的資料(因為儲存的資料可能隨時改變),在這個二維表格中的每一筆記錄稱為「值組」(Tuples)。
關聯式資料庫模型的資料操作或運算-代數說明 關聯式代數是低階運算子導向語言(Operator-oriented Language),用來描述如何得到查詢結果的步驟,如同程式語言一行一行的執行程式,這是一種程序式(Procedural)的查詢語言,一個關聯式代數運算式,如下所示: Result = σ Students.d_no = Departments.d_no (Students X Departments)
關聯式資料庫模型的資料操作或運算-代數運算子1 關聯式代數運算子中有些是源於傳統集合論的運算子和數學符號,如下所示: 交集(Intersection):∩ 聯集(Union):∪ 差集(Difference):- 卡笛生乘積(Cartesian Product):x
關聯式資料庫模型的資料操作或運算-代數運算子2 在關聯式代數運算子中屬於特殊關聯式運算子和其數學符號,如下所示: 選取(Selection):δ 投影(Projection):π 合併(Join): 除法(Division):÷
關聯式資料庫模型的資料操作或運算-計算 關聯式計算(Relational Calculus) 關聯式計算是高階的宣告式語言(Declarative Language),屬於非程序式(Non-procedural)查詢語言,並不用一步一步描述其過程,而是使用值組或定義域變數建立查詢運算式(Query Expression)直接宣告和定義查詢結果的關聯表,如下所示: { t | P(t) } { <x1, x2, …., xn> | P(<x1, x2, …., xn>) }
關聯式資料庫模型的資料操作或運算-SQL語言與代數與計算1 SQL結構化查詢語言的基礎就是關聯式代數和計算,SQL語言的語法可以視為一種關聯式計算的版本,關聯式資料庫管理系統內部的查詢處理模組(Query Processor)是將SQL指令轉換成關聯式代數運算式後,使用關聯式代數進行實際的資料查詢。
關聯式資料庫模型的資料操作或運算-SQL語言與代數與計算2 資料庫管理系統執行SQL指令敘述的過程,當輸入SQL指令後,SQL指令會轉換成關聯式代數運算式,以便進行最佳化處理,最後產生程式碼來執行查詢。
關聯式資料庫模型的資料操作或運算-SQL語言與代數與計算3 關聯式代數運算式也可以反過來轉換成對應的SQL指令敘述。例如:在前述的關聯式代數運算式相當於執行SQL語言的SELECT指令、FROM和WHERE子句,如下所示: SELECT * FROM Students, Departments WHERE Students.d_no = Departments.d_no 上述SQL語言的SELECT指令包含多種關聯式代數運算子,WHERE子句是合併與選取運算,FROM子句屬於卡笛生乘積運算,再加上UNION、EXCEPT和INTERSECT指令,就可以寫出關聯式代數運算式對應的SQL指令敘述。
關聯式資料庫模型的完整性限制條件-說明 關聯式資料庫模型的完整性限制條件(Integrity Constraints)是資料庫設計的一部分,其目的是檢查資料庫儲存的資料和保障資料的正確性,不但可以防止授權使用者將不合法的資料存入資料庫,還能夠避免關聯表之間的資料不一致。
關聯式資料庫模型的完整性限制條件-實體完整性 實體完整性(Entity Integrity) 實體完整性是關聯表內部的完整性條件,主要是用來規範關聯表主鍵的使用規則。即在關聯表的主鍵不可以是「空值」(NULL),主鍵(Primary Key)是一個可以代表關聯表每一筆記錄的屬性或多個屬性的組合。
關聯式資料庫模型的完整性限制條件-實體完整性(更新規則) 關聯式資料庫管理系統支援實體完整性,所以可以用來定義主鍵的更新規則(Update Rule),如下所示: 主鍵的更新規則:更新規則是指在基底關聯表的一個值組更新主鍵或新增值組時,如果主鍵是空值就違反實體完整性,所以資料庫管理系統必須拒絕這項操作。
關聯式資料庫模型的完整性限制條件-參考完整性 參考完整性(Referential Integrity) 參考完整性是關聯表與關聯表間的完整性條件,主要是規範外來鍵的使用規則,即關聯表中不可包含無法對應的「外來鍵」(Foreign Keys,簡稱FK)。
關聯式資料庫模型的完整性限制條件-參考完整性(範例) 例如:Books關聯表的publisher和a_no是外來鍵,換句話說,這2個鍵值一定分別存在Publishers和Authors關聯表,如下圖所示:
關聯式資料庫模型的完整性限制條件-參考完整性(使用規則) 外來鍵的更新規則(Update Rule):如果一個值組擁有外來鍵,當合法使用者試圖在更新或新增值組時,更改到外來鍵的值,資料庫管理系統會如何處理? 外來鍵的刪除規則(Delete Rule):如果一個值組擁有外來鍵,當合法使用者試圖刪除參考的主鍵時,資料庫管理系統會怎麼處理?
關聯式資料庫模型的完整性限制條件-參考完整性(處理方式) 資料庫管理系統可能有3種處理方式,如下所示: 限制性處理方式(Restricted):拒絕刪除或更新操作。 連鎖性處理方式(Cascades):連鎖性處理方式是當更新或刪除時,需要作用在所有影響的外來鍵,否則拒絕此操作。例如:在刪除客戶時,所有外來鍵參考的訂單資料也需一併刪除,當更改訂單項目編號,則所有訂單中擁有此項目的外來鍵也需一併更改。 空值化處理方式(Nullifies):將所有可能的外來鍵都設為空值,否則拒絕此操作。例如:當刪除客戶時,就將Orders關聯表中參考此客戶主鍵的外來鍵,即客戶編號都設為空值。
關聯式資料庫-說明 關聯式資料庫(Relational Database)是一種使用關聯式資料庫模型的資料庫,它是由多個已正規化的關聯表所組成,在關聯表間使用外來鍵與參考主鍵的資料值來建立連接,以便實作一對一、一對多和多對多關聯性,如果只擁有一個關聯表,也屬於合法的關聯式資料庫。
關聯式資料庫-一對一圖例
關聯式資料庫-一對多圖例
關聯式資料庫設計-說明 關聯式資料庫設計(Relational Database Design)的目的是建立關聯式資料庫,更正確的說,這是建立關聯式資料庫綱要,也就是定義資料表欄位和主索引等資料。
關聯式資料庫設計-主鍵與外來鍵 主鍵與外來鍵:定義資料表記錄的身份證字號 Access的主索引鍵就是主鍵(Primary Key),這是用來識別資料表唯一記錄的欄位資料,我們可以將資料表一到多個欄位集合建立成主鍵。
關聯式資料庫設計-正規化分析(目的) 正規化分析(Normalization):將欄位置於正確的資料表 刪除重複資料(Eliminating Redundancy):資料表中的重複資料不只浪費儲存空間,而且可能產生資料維護問題。 刪除不一致的相依關係(Eliminating Inconsistent Dependency):資料相依是讓相關的資料都能儲存在同一個資料表。
關聯式資料庫設計-正規化分析(階段) 正規化分析在處理資料時分為幾個階段,每個階段需要符合的條件,如下所示: 第一階正規化型式(1NF):資料表擁有主索引且一欄只有單一值。 第二階正規化型式(2NF):符合1NF且資料表沒有子集合記錄(不包括外來鍵欄位)的重複資料。 第三階正規化型式(3NF):符合1NF、2NF且資料表欄位都與主鍵相依。
關聯式資料庫設計-關聯性(說明) 關聯性(Relationships):定義資料查詢的方向 關聯式資料庫的關聯性分為很多種,不過在說明前需要先了解【實體】的基本定義,如下所示: 實體(Entity):這是將單一資料表的資訊使用一個名稱來代表,例如:【學生資料表】是一個名為【學生】的實體 屬性(Attributes):實體擁有的特性,例如:一位學生擁有學號、姓名、生日和電話等特性。
關聯式資料庫設計-關聯性(種類) 一對一關聯性(1:1):指一個實體的記錄,或稱為實例(Instance)只關聯到另一個實體的一筆記錄,例如:學校目前只有一個社團,所以學生在社團活動中只能擔任一個職位,同樣的,這個職位屬於一位指定學生。 一對多關聯性(1:N):指一個實體的記錄關聯到另一個實體的一筆或多筆記錄,例如:學校的每門課程都只有一位教授開課,一位教授實體可以教授一門到多門課程。 多對多關聯性(M:N):指一個實體的多筆記錄關聯到另一個實體的多筆記錄,例如:學生與課程實體,一位學生實體可以選修多門課程,一門課程實體可以允許多位學生實體來選修,通常多對多關聯性需要使用一個結合資料表來建立,以此例就是選課資料表的實體。
關聯式資料庫設計-完整性限制條件 完整性限制條件(Integrity Constraints):維護正確的關聯性 完整性限制條件是一種規則,可以確保關聯資料表中記錄的正確性,2個通用的資料完整性規則,可以適用所有的關聯式資料庫,如下所示: 實體完整性(Entity Integrity):實體的主鍵不可以是空值(NULL),即主鍵一定擁有唯一值,如此才能代表資料表的記錄。 參考完整性(Referential Integrity):資料庫中不可以包含無法對應的外來鍵值,換句話說,表示主鍵值的資料表中根本沒有此外來鍵值的記錄,這筆擁有外來鍵的記錄是從何而來。