第4章 關聯式資料庫模型 關聯式資料模式的特點、優缺點、關係連結法 4-1 關聯式資料庫模型的基礎 關聯式資料模型的組成元素 4-2 關聯式資料庫模型的資料結構 關聯表綱要、關聯表實例、關聯表、屬性、值組、維度、基數、主鍵、定義域、關聯表的特性、關聯表的種類 4-3 關聯式資料庫模型的完整性限制條件 鍵限制條件:超鍵、候選鍵、主鍵、替代鍵、外來鍵、候選鍵中挑選主鍵的原則、外來鍵的特性 定義域限制條件 實體完整性:主鍵的更新規則 參考完整性:外來鍵參考圖、外來鍵參考鏈、外來鍵參考鏈環、外來鍵使用規則、參考完整性處理方式 其他完整性限制條件:語意完整性 關聯式資料模式的特點、優缺點、關係連結法 4-5 關聯式資料庫 範例 資料庫(DB) ch04
4-1 關聯式資料庫模型的基礎 關聯式資料庫模型(Relational Database Model): 1969年E. F. Codd博士在IBM公司的研究成果 關聯式資料模型的組成元素: 資料結構(Data Structures): 資料的組成方式 關聯式資料模型來說,就是欄和列組成表格的關聯表(Relations) 資料操作或運算(Data Manipulation或Operations): 資料相關操作的關聯式代數和計算 完整性限制條件(Integrity Constraints): 維護資料完整性條件,目的是確保儲存資料是合法資料 資料庫(DB) ch04
4-2 關聯式資料庫模型的資料結構-說明 關聯式資料庫: 關聯表: 一組關聯表(Relations)的集合 關聯式資料庫模型的資料結構(Data Structure) 使用二維表格組織資料: 關聯表綱要(Relation Schema): 包含關聯表名稱、屬性名稱和其定義域 關聯表實例(Relation Instance): 指某個時間點儲存在關聯表的資料 因為儲存的資料可能隨時改變 可視為一個二維表格,儲存的每一筆記錄是一個值組(Tuples) 資料庫(DB) ch04
4-2 關聯式資料庫模型的資料結構-圖例 string 資料庫(DB) ch04
4-2-1 關聯表綱要-相關術語1 資料庫(DB) ch04
4-2-1 關聯表綱要-相關術語2 關聯表(Relations): 屬性(Attributes): 值組(Tuples): 相當於一個二維表格 但不同於表格,不用考慮各列和各欄資料的順序 每一個關聯表需要指定關聯表名稱 屬性(Attributes): 關聯表的所有屬性是一個屬性集合(Attribute Set) 因為是集合,關聯表的屬性不能重複 值組(Tuples): 關聯表的一列,也就是一筆記錄 這是一組目前屬性值的集合 資料庫(DB) ch04
4-2-1 關聯表綱要-相關術語3 維度(Degree): 基數(Cardinality): 主鍵(Primary Key): 關聯表的屬性數目 基數(Cardinality): 關聯表的值組數目 主鍵(Primary Key): 關聯表需選擇一個或多個屬性的屬性子集(Attribute Subset)作為主鍵 用來識別值組是唯一的 資料庫(DB) ch04
4-2-1 關聯表綱要-相關術語3 資料庫(DB) ch04
4-2-1 關聯表綱要-表示法(語法) 關聯表綱要表示法的語法: relation_name (attribute1, attribute2, attribute3, … , attributeN) 說明: relation_name:關聯表名稱 attribute1, attribute2, attribute3, …. , attributeN: 括號中是屬性清單 通常省略屬性的定義域 屬性加上底線表示主鍵 外來鍵使用虛線底線或其他表示方法 資料庫(DB) ch04
4-2-1 關聯表綱要-表示法(範例) 例:關聯表Students的關聯表綱要: Students (sid, name, address, tel, birthday) 主鍵是sid 關聯表綱要亦可標示定義域的int、char和datetime: Students (sid(int), name(char), address(varchar), tel(char), birthday(datetime)) 資料庫(DB) ch04
4-2-2 關聯表實例-說明 關聯表實例(Relation Instance): 一個有限個數的集合 集合內容是關聯表的值組(Tuples) 關聯表資料可能隨時更改 關聯表實例是指某一時間點的值組集 資料庫(DB) ch04
4-2-2 關聯表實例-定義域(說明) 定義域(Domains): 一組可接受值的集合 這些值是不可分割的單元值(Atomic),不可是另一個集合 對比程式語言來說: 定義域相當於變數的資料型態 值組的屬性值相當於是變數值,滿足資料型態的定義域範圍 資料庫(DB) ch04
4-2-2 關聯表實例-定義域(種類) 定義域分為兩種: Birthday = Month + Day + Year 簡單屬性(Simple Attributes): 簡單屬性是一種不可再分割的屬性 定義域是相同型態的單元值(Atomic)集合 複合屬性(Composite Attributes): 複合屬性是由簡單屬性所組成的屬性,可形成一個階層架構 例如: 地址屬性可由數個簡單屬性所組成: Address = City + Street + Number 生日屬性: Birthday = Month + Day + Year 資料庫(DB) ch04
4-2-2 關聯表實例-屬性值(說明1) 屬性值(Attribute Values): 關聯表實際儲存資料的最小單位 屬性集合的每一個屬性都擁有一組可接受的值,即屬性的定義域 例如:學生Students關聯表 關聯表實例的屬性值集合(Attribute Value Set): 指目前關聯表實例各屬性所包含的值: city屬性值 ={'中和巿', '桃園巿', '台中巿', '高雄市' } age屬性值 = 21~30 GPA屬性值= 1~4.0 資料庫(DB) ch04
4-2-2 關聯表實例-屬性值(特點) 單元值(Atomic): 指定定義域: 可能為空值(null): 屬性值是不可分割的單元值 屬性值一定要指定定義域,且只有一個定義域 屬性值屬於指定的定義域,但並不表示所有的定義域值都會出現 屬性值集合可能只是定義域的部分集合 可能為空值(null): 屬性值可能空值 資料庫(DB) ch04
4-2-2 關聯表實例-空值(說明) 空值(Null Values): 空值分成3種: 關聯表的屬性值可能是一個未知或無值的空值 空值是一個特殊符號,不是0,也不是空字串 所有定義域都會包含空值 空值並沒有意義,不能作為真偽的比較運算 空值分成3種: 未知值(Unknown) 完全未知(Total Unknown) 不適性(Not Applicable) 資料庫(DB) ch04
4-2-2 關聯表實例-空值(意義1) 未知值(Unknown): 找不到(Missing): 屬性值存在但找不到 例如: 不知道學生【陳大安】的地址 address屬性值一定存在只是找不到,是一個找不到的空值 資料庫(DB) ch04
4-2-2 關聯表實例-空值(意義2) 完全未知(Total Unknown): 不知道屬性值是否存在 例如: 不知道張先生是否有配偶 配偶欄spouse是完全未知的空值 資料庫(DB) ch04
4-2-2 關聯表實例-空值(意義3) 不適性(Not Applicable): 沒有適合的屬性值 例如: 公司員工劉先生沒有手機 cellphone 屬性值的手機號碼是一個不適性的空值 資料庫(DB) ch04
4-2-3 關聯表的特性-說明 關聯表的5個特性: 名稱唯一性: 沒有重複的值組(不可有重複的記錄): 關聯表的名稱是唯一的 同一資料庫不能有兩個關聯表擁有相同名稱 同一個關聯表的屬性名稱也是唯一 不同關聯表允許擁有相同名稱的屬性 沒有重複的值組(不可有重複的記錄): 關聯表是數學集合,集合中不可有重複元素 隱含的意義是關聯表的主鍵 主鍵是值組的識別,沒有2個值組是完全相同的 值組是沒有順序(記錄沒有分先後順序): 關聯表的值組是集合,沒有順序分別 重新排列關聯表的值組,也不會產生新的關聯表 屬性也沒有順序(欄位沒有分先後順序): 大部分資料庫管理系統並不支援此特性 資料庫管理系統提供的資料庫存取函式庫,可取得屬性的原始順序,且允許使用順序存取屬性值 所有的屬性值都是單元值(Atomic) 二維表格中的每一個儲存格的值都是單一值 資料庫(DB) ch04
4-2-4 關聯表的種類 具名關聯表(Named Relations): 基底關聯表(Base Relations): 使用CREATE TABLE/VIEW和SNAPSHOT指令建立的關聯表 基底關聯表(Base Relations): 一種具名關聯表,也稱為真實關聯表(Real Relations) 導出關聯表(Derived Relations): 由其他具名關聯表,經過運算而得的關聯表 視界(Views): 定義在其他基底關聯表之上的一種虛擬關聯表(Virtual Relations) 快照關聯表(Snapshots): 具名的導出關聯表 一個時間點的關聯表內容,它有真正的儲存資料,屬於一種唯讀關聯表 查詢結果(Query Results): 一種沒有具名的導出關聯表 中間結果(Intermediate Results): 沒有具名的導出關聯表,是JOIN合併查詢指令中子查詢的查詢結果 暫存關聯表(Temporary Relations): 一種具名關聯表,儲存的是資料庫管理系統暫時所需的資料 儲存型關聯表(Stored Relations): 實際儲存在儲存裝置的關聯表,是真正可儲存資料的關聯表 資料庫(DB) ch04
4-3 關聯式資料模型的完整性限制條件-說明 關聯式資料庫模型的完整性限制條件(Integrity Constraints): 資料庫設計的一部分 目的: 檢查資料庫儲存的資料和保障資料的正確性 可防止授權使用者將不合法的資料存入資料庫 能夠避免關聯表之間的資料不一致 資料庫(DB) ch04
4-3 關聯式資料模型的完整性限制條件-種類 鍵限制條件(Key Constraints): 關聯表一定擁有一個唯一和最小的主鍵(Primary Key) 定義域限制條件(Domain Constraints): 關聯表的屬性值一定是屬於定義域的單元值 實體完整性(Entity Integrity): 關聯表的主鍵不可以是空值 定義關聯表內部的限制條件 參考完整性(Referential Integrity): 關聯表的所有外來鍵值,都必須能參考到另一關聯表的主鍵值(或同一個關聯表的主鍵) 定義關聯表彼此之間的限制條件 資料庫(DB) ch04
完整性限制種類(補充) 值域限制(domain constraint): 又稱 區域完整性 (Domain Integrity),確保資料在允許的範圍 Allowable values for an attribute. (屬性的容許值)﹐請參閱p 5-8 表5-1 值域包含右列元件:值域名稱、意義、資料型態、大小(長度)、及可允許的值或範圍 實體完整性(Entity integrity): No primary key attribute may be null. 任何主鍵屬性都不可為null All primary key fields MUST have data. 所有的主鍵欄位都必須有資料 規範關聯表內部的限制條件 確保關聯表中的記錄是 “唯一” 參考完整性(referential integrity): 規範關聯表與關聯表之間的限制條件 確保相關連的關聯表間資料一致, 避免因一個關聯表的記錄改變, 造成另一個關聯表的內容變成無效的值 行動主張(action assertion): 業務法則﹐請回顧第4章 又稱使用者定義的完整性 (User-defined Integrity) ,由使用者自行定義 資料庫(DB) ch04
4-3-1 鍵限制條件-說明 關聯表的鍵(Keys): 關聯表綱要單一屬性或一組屬性的集合 候選鍵為超鍵的子集 主鍵和替代鍵為候選鍵的子集,也是超鍵的子集 主鍵和替代鍵為外來鍵的部分集合 資料庫(DB) ch04
4-3-1 鍵限制條件-超鍵 超鍵(Superkeys): 超鍵是關聯表綱要的單一屬性或一組屬性的集合 超鍵需要滿足唯一性: 唯一性(Uniqueness): 在關聯表絕不會有2個值組擁有相同值 只需透過超鍵的識別,就可在關聯表存取指定的值組 資料庫(DB) ch04
4-3-1 鍵限制條件-候選鍵 候選鍵(Candidate Keys): 每一個關聯表至少擁有一個候選鍵 候選鍵是一個超鍵 候選鍵不只滿足超鍵的唯一性,還需滿足最小性: 最小性(Minimality): 最小屬性數的超鍵,在超鍵中沒有一個屬性可以刪除,否則將違反唯一性 關聯表的候選鍵需要同時滿足唯一性和最小性 候選鍵是最小屬性數的超鍵 所以,單一屬性的超鍵一定是候選鍵 資料庫(DB) ch04
4-3-1 鍵限制條件-主鍵、替代鍵、外來鍵 主鍵(Primary Key , PK ): 關聯表各候選鍵(Candidate Keys)的其中之一,且只有一個 替代鍵(Alternate Keys): 候選鍵中不是主鍵的其他候選鍵稱為替代鍵 這些可用來替代主鍵的侯選鍵 外來鍵(Foreign Keys , FK ): 關聯表的單一屬性或一組屬性的集合 值是參考其他關聯表的主鍵,也可能參考同一個關聯表的主鍵 外來鍵和其他關聯表的主鍵是對應的,扮演連結關聯表膠水功能 次要鍵( Secondary Key ):(補充) 又稱 nonunique key(非唯一鍵) 對於此欄位, 多筆記錄資料會有相同值 主要的功能是提供資料索引 主鍵是唯一的識別值,可用做索引 可設定其他欄位用作資料索引 主鍵索引 索引類型: 叢集: 叢集索引將資料表或檢視中的資料列依其索引鍵值排序與儲存 資料列本身只能以一種順序排序,所以每個資料表只能有一個叢集索引 只有當資料表包含叢集索引時,資料表的資料列才會以排序順序儲存 當資料表有叢集索引時,資料表又稱為叢集資料表 非叢集: 非叢集索引有一個與資料列完全分開的結構 非叢集索引包含非叢集索引鍵值,而每個索引鍵值項目都有一個指標,指向包含索引鍵值的資料列 從非叢集索引中的索引列指向資料列的指標被稱為資料列定位器 若是堆積,資料列定位器是指向資料列的指標 若是叢集資料表,資料列定位器就是叢集索引鍵 索引鍵的限制: 900 個位元組和 16 個索引鍵資料行 叢集與非叢集索引 參考備忘稿 資料庫(DB) ch04 除了主鍵索引外, 其他欄位的索引
4-3-1 鍵限制條件-主鍵(原則) 候選鍵中挑選主鍵的原則: 絕對不是空值(Not Null): 候選鍵的屬性值不能是空值 如果是複合鍵,所有屬性都保證不會是空值 永遠不會改變(Never Change): 候選鍵的屬性值永遠不會改變 本身不是識別值(Nonidentifying Value): 候選鍵的屬性值本身沒有其他意義 亦即,不是智能型識別子 (如﹐包含可能異動的位置或人員) 例如:若一個產品編號的候選鍵,產品編號含產品庫存的倉庫編號,則萬一此產品不再放在該倉庫,則勢必要更改該產品編號,但是產品編號是候選鍵,不可被更動的 簡短且簡單的值(Brevity and Simplicity): 儘可能選擇單一屬性的候選鍵 以新的單一鍵來代替冗長的複合鍵 資料庫(DB) ch04
4-3-1 鍵限制條件-外來鍵(圖例) 資料庫(DB) ch04
4-3-1 鍵限制條件-外來鍵(特性) 外來鍵的特性 : 外來鍵參考其他關聯表的主鍵,也可能參考同一個關聯表的主鍵 是兩個關聯表間的連結 authors 外來鍵在關聯表內不一定是主鍵 Books a_no 和 publisher 是外來建 外來鍵和參考的主鍵屬於相同定義域,不過屬性名稱可以不同 publishers 外來鍵和參考主鍵: 主鍵是單一屬性,外來鍵就是單一屬性 主鍵是屬性集合,外來鍵一樣也是屬性集合 外來鍵可以是空值NULL 外來鍵可參考同一個關聯表的主鍵 Employees ( sid , name , address , phone , manager_id ) 資料庫(DB) ch04
4-3-2 定義域限制條件 定義域限制條件(Domain Constraints): 在關聯表的屬性值一定是定義域的單元值(Atomic) 例如:屬性age的定義域是int 屬性值可為5,但不可是4.5 就是一種強調(勢)型態(Strongly Typed)程式語言 強型別 ( Strong Type ) : 一種觀念,指盡量使用具有型別的方式開發 可讓開發人員在編譯時期(Compile-Time)就能夠發現錯誤 減少執行時期(Runtime)發生錯誤的機會 資料庫(DB) ch04
4-3-3 實體完整性-說明 實體完整性(Entity Integrity): 指在基底關聯表主鍵的任何部分都不可以是空值 規則如下: 若主鍵是多個屬性的集合,任何一個屬性不可是空值 例如:(ename, cname)是主鍵 ename屬性不可為空值,cname屬性也不可是空值 關聯表只有主鍵不可是空值,替代鍵並不適用 實體完整性是針對基底關聯表,其導出的關聯表並不用遵守 資料庫(DB) ch04
4-3-3 實體完整性-主鍵的使用規則 主鍵的使用規則(Rule): 關聯式資料庫管理系統都支援實體完整性: 以敘述方式說明發生的原因和將會有什麼影響 資料庫系統所定義的完整性限制條件執行的規則 關聯式資料庫管理系統都支援實體完整性: 定義主鍵的更新規則(Update Rule): 基底關聯表的一個值組更新主鍵或新增值組時 如果主鍵是空值就違反實體完整性,資料庫管理系統必須拒絕這項操作 資料庫(DB) ch04
4-3-4 參考完整性-說明 參考完整性(Referential Integrity): 當關聯表存在外來鍵時 外來鍵的值一定是來自參考主鍵或空值 外來鍵的屬性值集合即是參考主鍵的屬性值集合 定義域 資料庫(DB) ch04
4-3-4 參考完整性-範例 例如: 員工關聯表Employees都會參與公司的專案關聯表Projects 沒問題:Leader屬性不是主鍵 有問題:違反參考完整性 沒問題:Leader屬性不是主鍵 資料庫(DB) ch04
4-3-4 參考完整性-規則 關聯表不可包含無法參考的外來鍵 若外來鍵不是關聯表的主鍵,屬性值可為空值 例如: 員工李四的project欄位外來鍵值根本不存在 參考主鍵pid,表示此值組違反參考完整性 因為沒有父親的pid,怎麼會有兒子project 若外來鍵不是關聯表的主鍵,屬性值可為空值 Projects關聯表硬體授權的leader外來鍵是空值 可能尚未指定專案領導者,所以並沒有違反參考完整性 資料庫(DB) ch04
4-3-4 參考完整性-外來鍵參考圖 外來鍵參考圖(Referential Diagram): 建立資料庫綱要時使用圖形標示關聯表間的外來鍵關係 Employees ( sid , name , address , phone ) Departments ( did , name , manager ) WorksOn ( pid , employee, hour ) Projects ( pid , name , department , leader ) 資料庫(DB) ch04
外來鍵參考圖 Employees ( sid , name , address , phone ) Departments ( did , name , manager ) WorksOn ( pid , employee, hour ) Projects ( pid , name , department , leader ) 資料庫(DB) ch04
4-3-4 參考完整性-外來鍵參考鏈 外來鍵參考鏈(Referential Chain): 關聯表的外來鍵是參考其他關聯表的主鍵 在參考的關聯表也可能擁有其他的外來鍵,然後再參考其他關聯表 將這些外來鍵的參考關係依序繪出,就可建立外來鍵參考鏈: Projects → Departments → Employees 資料庫(DB) ch04
4-3-4 參考完整性-外來鍵參考環 外來鍵參考環(Referential Cycle): 外來鍵參考最後回到原關聯表 例如: 關聯表R1的參考鏈最後又回到R1,外來鍵參考環如下: R1 → R2 → R3 → …. → Rn → R1 資料庫(DB) ch04
4-3-4 參考完整性-外來鍵使用規則 外來鍵的更新規則(Update Rule): 外來鍵的刪除規則(Delete Rule): 若一個值組擁有外來鍵 當合法使用者試圖在更新或新增值組時 更改外來鍵的值,資料庫管理系統會有如何處理? 外來鍵的刪除規則(Delete Rule): 當合法使用者試圖刪除參考的主鍵時 資料庫管理系統會怎麼處理? 資料庫(DB) ch04
4-3-4 參考完整性-處理方式 參考完整性處理方式: 限制性處理方式(Restricted): 拒絕刪除或更新操作 連鎖性處理方式(Cascades): 當更新或刪除時,需要作用在所有影響的外來鍵,否則拒絕此操作 空值化處理方式(Nullifies): 將所有可能的外來鍵都設為空值,否則拒絕此操作 資料庫(DB) ch04
4-3-5 其他完整性限制條件-說明 自訂額外檢查條件: 資料庫管理師依照需求在基底關聯表的屬性 新增額外的完整性限制條件 所有導出關聯表也會繼承在基底關聯表設定的完整性條件 額外條件: 關聯表新增、刪除和更新資料,觸發的一些額外檢查條件 資料庫(DB) ch04
4-3-5 其他完整性限制條件-語意完整性 語意完整性(Semantic Integrity): 特定資料庫管理系統支援的完整性條件 屬性內容的一些限制條件 可檢查關聯表值組的屬性是否為合法資料 主要限制條件如下: 空值限制條件(Null Constraint): 限制屬性值不可為空值 這個屬性一定要輸入資料 預設值(Default Value): 若沒有輸入指定的屬性值 值組的屬性預設會填入指定的資料 主要的目的是避免屬性為空值 檢查限制條件(Check Constraint): 布林值的邏輯運算式 輸入的屬性值一定需要滿足運算式,即邏輯運算式為真(true) 資料庫(DB) ch04
關聯式資料模式的特點 以數學的集合論作為理論基礎 資料結構以 關聯表(Tables) 呈現 關聯表(Relations) 為處理的單位(集合) 不是以單一筆的記錄做為處理單位 表格看成是由記錄(Records) 所構成的集合 提供關聯式代數/關聯式計算相同表達能力的查詢介面 關聯表運算具有封閉性(Closure) 如:整數對加法及減法有封閉性 “一次處理一個集合”(Set-at-a-Time) 使用資料值(Data Values) 隱含地連接關聯表 在邏輯上,資料是以表格方式呈現 實際儲存在磁碟卻可能是: 循序檔案、磁碟索引結構(如:B-trees, B+-trees)、雜湊表(如:Extendible Hashing, Linear Hashing)、指標串列(Pointer Chain) 或是經過壓縮儲存 資料庫(DB) ch04
關聯式資料模式的優缺點 優點: 缺點: 完全地資料和結構的獨立(Data and structural independence) 查詢能力(Query capability,如:SQL) 缺點: 關聯式資料庫邏輯模型(relational DB logical model ) 比其他階層式及網路式簡單 但,DBMS的設計會較複雜且處理速度慢 資料庫(DB) ch04
關聯式資料模式-關係連結法 關聯式資料關係連結法: 資料間關係以資料值(Data Value) 連結 階層式資料模式與網路式資料模式 以指標(Pointer) 作為連結資料間的關係 資料間的關係以合併運算(Join)完成 資料庫(DB) ch04
關聯式資料模式 -關聯表以資料值表示資料間的關係 員工employees 工作關係Work_in 部門department eid name did 7 Frank 5 Finance eid did 資料庫(DB) ch04
4-5 關聯式資料庫-說明 關聯式資料庫(Relational Database): 使用關聯式資料模型的資料庫 由多個已正規化的關聯表所組成 關聯表間使用外來鍵與參考主鍵的資料值來建立連結 實作一對一、一對多和多對多的關聯性 關聯式資料庫綱要(Relational Database Schema): 一組關聯表綱要和各綱要附屬的完整性限制條件 注意: 只擁有一個關聯表,也是一種合法的關聯式資料庫 資料庫(DB) ch04
4-5 關聯式資料庫-關聯表綱要 Student ( sid, name, birthday, GPA, tel ) 例如: 學校選課與排課系統資料庫擁有4個關聯表,各關聯表綱要,如下: Student ( sid, name, birthday, GPA, tel ) Instructors ( eid, name, rank, department ) Courses ( c_no, title, credits ) Classes ( eid, sid, c_no, time, room ) 修課資料表 資料庫(DB) ch04
4-5 關聯式資料庫-關聯表圖例 限制性處理方式(Restricted) 連鎖性處理方式(Cascades) 空值化處理方式(Nullifies) 資料庫(DB) ch04
4-5 關聯式資料庫-外來鍵參考圖範例一 資料庫(DB) ch04
外來鍵參考圖範例二 限制性處理方式(Restricted) 連鎖性處理方式(Cascades) 空值化處理方式(Nullifies) 資料庫(DB) ch04