Fundamentals of Database Systems

Download Report

Transcript Fundamentals of Database Systems

第5章
關聯式資料模型與關聯式資
料庫的限制
學習重點
☼關聯式模型的觀念
☼非正式的定義
☼正式的定義
☼關聯的特徵
☼鍵值限制
☼候選鍵與主鍵
☼實體完整性與參考完整性限制
☼其他類型的限制
☼關聯的更新運算動作
資料庫管理
2
關聯式模型的觀念
☼關聯式模型(relational model):將資料庫
表示成一個由「關聯」(relation)所組成的
集合
♦ 每個關聯就好像一個「表格」(table),裡面有
資料值
♦ 表格名稱與欄位名稱是用來說明每一列的值所
代表的意義
☼關聯是一種數學觀念,其理論基礎是集合
論
資料庫管理
3
非正式的定義
☼關聯 (Relation):由資料值所組成的表格
♦
♦
♦
♦
關聯可視為是一組橫列 (row) 的集合
關聯也可以視為是一組直欄 (column) 的集合
每個橫列是對應到某個真實世界的實體或關係
每個直欄通常是以它的欄位名稱、欄位標題或
屬性名稱來稱呼
♦ 每一橫列(row)有一或多個項目的值能讓此橫列
被唯一辨識出來
▫ 這一或多個項目被稱為鍵值(key)
▫ 例如,圖5.1中,Ssn即是鍵值(key)
資料庫管理
4
Student關聯的屬性和值組
資料庫管理
5
正式的定義─綱要(schema)
☼ 關聯式模型術語的正式定義
♦
♦
♦
♦
關聯(relation):表格
值組(tuple):每一列
屬性(attribute):欄位的標題
定義域(domain):每一欄內所能合法出現的數值
☼ 關聯的綱要
♦ 被表示成R (A1, A2, .....An)
♦ R是關聯的名稱
♦ A1, A2, .....An 皆是關聯的屬性
☼ 範例
CUSTOMER (Cust-id, Cust-name, Address, Phone#)
♦ CUSTOMER是關聯名稱
♦ 4個屬性Cust-id、Cust-name、Address、Phone#
資料庫管理
6
正式的定義─值組(tuple)
☼值組 (tuple):一組值的有序集合 (ordered
set)
♦ 每個值都是從適當的定義域中取得
☼範例:在CUSTOMER關聯中
♦ 每一列可以稱作一筆值組,其中含有4個值
▫ 例如 ,<632895, “John Smith”, “101 Main St.
Atlanta, GA 30332”, “(404) 894-2000”> 是其
中一筆值組
☼一個關聯可以稱作一組值組 (tuple) 的集合
☼關聯的向度(degree):關聯綱要的屬性個數
資料庫管理
7
正式的定義─定義域(domain)
☼定義域(domain):由一組不可分割的單元值
(atomic)所組成的集合
♦ 可以被指定某種資料型態或資料格式
▫ USA_phone_numbers定義域的資料型態可宣告為(ddd)ddd-dddd,其中的d是代表一個10進位數字
▫ 日期的資料格式有多種,如yyyy-mm-dd或dd mm,yyyy
♦ 組成定義域的所有值可以由這個資料型態中取得
♦ 定義域會指定名稱、資料型態或格式,另外可能
指定其他額外的資訊
▫ 例如,Person_weights需要指定其測量單位(磅or公斤)
♦ 屬性Ai的定義域,被表示成dom(Ai)
資料庫管理
8
正式的定義─狀態(state)
☼ 關聯狀態(relation state):關聯R(A1, A2, ..., An)的狀態
是由n值組所組成的集合 r={t1, t2, ..., tm}
♦ 表示成 r(R)
♦ 每個n值組(n-tuple) t 都是由n個vi所組成的有序串列
▫ 實際上, t = {v1, v2, ..., vn},每個vi都是dom (Ai)的一
個元素或是個特殊的空值(NULL)
☼ 關聯狀態的數學化正式定義
♦ 由定義域的卡氏積 (cartesian product) 所形成的
▫ 卡氏積會產生由定義域所衍生出來所有可能值的組合
♦ r(R)  dom (A1) × dom (A2) × .... × dom(An)
♦ 卡內積中的值組總個數為
|dom (A1)| × |dom (A2)| × .... × |dom(An)|
▫ |dom (Ai)|代表定義域dom (Ai)內資料值的總個數
資料庫管理
9
定義域的範例
☼假設R(A1, A2) 是一個關聯綱要
♦ 令 dom(A1) = {0,1} 且 dom(A2) = {a,b,c}
♦ 則 dom(A1) × dom(A2) 是所有可能值的組合,
如下所示
{<0,a> , <0,b> , <0,c>, <1,a>, <1,b>, <1,c> }
♦ 通常 r(R)  dom(A1) × dom(A2)
♦ 例如,在資料庫中的關聯狀態 r(R) 可能只有三
組資料,如下所示
{<0,a>, <0,b>, <1,c>}
資料庫管理
10
名詞定義對照表
正式的關連式術語
非正式的相等用語
關連(relation)
表格(table)
值組(tuple)
橫列或記錄(row or record)
基數(cardinality)
橫列個數(number of rows)
屬性(attribute)
直欄或欄位(column or field)
定義域(domain)
合法值群(Values in a column)
向度(degree)
直行個數(number of columns)
主鍵(primary key)
唯一識別字(unique identifier)
資料庫管理
11
關聯的特徵 (1/4)
☼關聯 r(R)中值組的順序:
♦ 關聯中的值組是沒有任何特定順序的
♦ 圖5.1與圖5.2所表示的關聯被視為完全相等
♦ 要求值組有順序有時候反而造成麻煩:
▫ 順序本身也是一種資訊,須小心維護其順序
▫ 系統必須提供「在第 n 與第 n+1 筆間加入一
筆」或 「請刪除第 6 筆」的運算
▫ 要以那一個屬性做為排順序的依據?或是以
加入的時間來排順序?
♦ 通常的應用中,是查詢後對結果下排序命令
(order by)
資料庫管理
12
關聯的特徵 (2/4)
資料庫管理
13
關聯的特徵 (3/4)
☼ 關聯綱要R中屬性的順序 (及值組中資料值的順序)
♦ 定義在R(A1, A2, ..., An) 中的屬性,還有在 t=<v1,
v2, ..., vn> 裡的值是有順序的 (ordered)
♦ 在一般化的關聯定義,不需要限制屬性的順序
♦ 事實上,屬性與其資料值的順序並非那麼重要
▫ 只要能夠維持屬性及其資料值間的對映即可
▫ 圖5.3的兩個值組若根據這個定義,則是完全
相同的
資料庫管理
14
關聯的特徵 (4/4)
☼值組中的資料值:
♦ 在關聯模型中,值組內的每個資料值都
是不可分割的 (atomic)。
♦ 表示法:
▫ 將值組 t 的成分值以 t[Ai] = vi 來表示 (值組
t 的屬性Ai 的值)
▫ t[Au, Av, ..., Aw] 是代表 t 的子值組,裡面分
別包括屬性Au, Av, ..., Aw 的值
☼值組中的空值:
♦ 空值 (null) 是用來表示屬性值是未知的,
或者是不適用於該值組
資料庫管理
15
關聯式模型的限制
☼ 所謂的限制 (constraint) 是指在所有有效的
關聯實例上都要成立的那些條件
(condition)。這裡的限制主要分成3種:
♦
♦
♦
鍵值限制 (key constraint)
實體完整性限制 (entity integrity constraint)
參考完整性限制 (referential integrity constraint)
☼ 定義域限制 (domain constraint)
♦
♦
資料庫管理
每個屬性A的值必須是該屬性定義域dom(A)內
的一個不可分割的單元值
此限制通常是隱含的限制
16
鍵值限制 (1/2)
☼鍵值限制(key constraint):
♦ 在同一個關聯中,二筆不同的值組在鍵值(key)
上的所有屬性不能有完全相同的值
☼鍵值(key):
♦ 鍵值(記作K)是最小的超鍵(superkey),也就是說
▫ 它如果從K移除了任何屬性後,所形成的新
集合K’不再是關聯綱要R的超鍵
☼超鍵(superkey):
♦ 關聯綱要R的超鍵,代表R中一些屬性的集合(記
作SK),且滿足下列條件
▫ 在合法的關聯狀態r(R)中,沒有任何兩個SK
值組內的屬性資料值是相同的。可寫成
– 任兩個r(R)中不同的值組 t1 及 t2  t1[SK]≠ t2[SK]
資料庫管理
17
鍵值限制 (2/2)
☼範例:考慮CAR關聯綱要
CAR(State, Reg#, SerialNo, Make, Model, Year)
♦ 假設CAR有兩個鍵值 (key)
▫ Key1 = {State, Reg#}
▫ Key2 = {SerialNo}
♦ Key1 及 Key2 都是CAR 的超鍵 (superkey)
♦ {SerialNo, Make}是CAR的超鍵,但不是鍵值
☼結論
♦ 任何鍵值是超鍵 (反之,則不然)
♦ 任何包含鍵值的屬性集合一定是超鍵
♦ 最小的超鍵也是鍵值
資料庫管理
18
候選鍵與主鍵 (1/2)
☼ 候選鍵(candidate key):
♦ 一個關聯綱要可能有一個以上的鍵值,這種情況下,
每個鍵值都被稱為候選鍵
▫ 在圖5.4中,CAR關聯有兩個候選鍵
– License_number 及 Engine_serial_number
♦ 候選鍵的值會被用來識別關聯中的不同值組
☼ 主鍵(primary key):
♦ 候選鍵其中之一會被指定為此關聯的主鍵
♦ 通常會選擇所含屬性的個數愈小越好,最好只有一
個屬性
♦ 主鍵通常會被加上底線
♦ 應選擇較不會改變其值的屬性當主鍵。如學號、身
份証號碼
♦ 確保不會有空值(null)的屬性
資料庫管理
19
候選鍵與主鍵 (2/2)
資料庫管理
20
關聯式資料庫綱要
☼關聯式資料庫綱要(schema)
♦ 一個關聯式資料庫綱要S,是一組關聯綱要
的集合,S = {R1, R2 …, Rm},加上一組完整
性限制(integrity constraint) IC
☼關聯式資料庫狀態(state)
♦ S的關聯式資料庫狀態DB,是一組關聯狀態
的集合,DB = {r1, r2 …, rm},其中每一個ri
都是Ri 的狀態,且ri 滿足IC中的完整性限制
☼圖5.5是一個關聯式資料庫綱要範例
♦ 共有六個關聯
♦ 每個關聯綱要中畫底線的屬性代表主鍵
資料庫管理
21
關聯式資料庫綱要的範例
資料庫管理
22
關聯式資料庫狀態的範例
資料庫管理
23
實體完整性及參考完整性限制 (1/2)
☼實體完整性限制(entity integrity constraint)
♦ 主鍵的值不可以等於空值 (NULL)
☼參考完整性限制(referential integrity constraint)
♦ 一個關聯R1參考到另一個關聯R2時, R1裡的外
來鍵的值必須滿足外來鍵的定義
☼鍵值限制與實體完整性限制:指定在個別
關聯上
☼參考完整性限制:指定在兩個關聯之間,
用來保持兩個關聯值組間的一致性
資料庫管理
24
實體完整性及參考完整性限制 (2/2)
☼外來鍵(foreign key):
♦ 在關聯綱要R1裡的一組屬性集合FK滿足以下
規則,則稱FK為R1參考R2的外來鍵
▫ 在FK中的屬性與R2的主鍵屬性PK有相同的定義域
▫ 在目前狀態r1(R1)的t1值組中,FK的值不是出現在
r2(R2)的某個值組t2中的PK值,就是空值
☼在外來鍵的定義中
♦ R1稱為參考關聯 (referencing relation)
♦ R2稱為被參考關聯 (referenced relation)
☼參考完整性限制的圖形表示法
♦ 從外來鍵畫出一條有箭頭的線到它所參考的關
聯上
資料庫管理
25
參考完整性限制範例
資料庫管理
26
其他類型的限制
☼語意完整性限制 (Semantic Integrity Constraint)
♦ 根據應用本身的語意,無法由模型本身來表達
▫ 例如,「員工在所有計畫上工作的每週最大
時數為56」就算是這類限制
♦ 這類限制是利用一種限制指定語言 (constraint
specification language) 來表達
▫ 所使用的機制被稱為觸發 (trigger) 或宣示
(assertion)
▫ SQL-99有 CREATE ASSERTION命令可使
用
資料庫管理
27
關聯的更新運算動作 (1/2)
☼ 在關聯上有三種基本的更新運算
♦ 插入 (INSERT)
▫ 用來插入一或多筆新的值組
♦ 刪除 (DELETE)
▫ 用來刪除值組
♦ 更新 (UPDATE)
▫ 用來改變值組中的某些屬性值
☼ 注意:
♦ 在進行更新運算時,原本指定的完整性限制仍然不
應該違反
♦ 有時可能需要將數個更新運算組合在一起
♦ 更新運算可能會傳播(propagate)而自動引發其他的更
新運算。
▫ 為了維持完整性限制可能必須如此
資料庫管理
28
關聯的更新運算動作 (2/2)
☼假如發生違反完整性限制的情況,可以
採取以下這些措施:
♦ 取消(cancel)導致這個違反情況的運算
▫ REJECT 選項
♦ 執行(perform)這個運算但通知(inform)使用
者有發生違反情況
♦ 觸發(trigger)額外的更新動作,來修正這個
違反情況
▫ CASCADE選項、SET NULL選項
♦ 執行由使用者所定義的錯誤修正程序
資料庫管理
29
插入(insert)運算
☼插入運算可能違反的完整性限制
♦ 定義域限制
▫ 如果被指定的屬性值並未屬於所對應的定
義域
♦ 鍵值限制
▫ 如果新值組的鍵值已經存在於關聯中的另
一個值組裡
♦ 實體完整性限制
▫ 如果新值組的主鍵等於NULL
♦ 參考完整性限制
▫ 如果新值組的任何外來鍵參考了某個不在
被參考關聯中的值組
資料庫管理
30
插入運算─範例 (1/2)
☼ 將 <‘Cecilia’, ‘F’, ‘Kolonsky’, null, ‘1960-04-05’,
‘6357 Windy Lane, Katy, TX’, F, 28000, NULL, 4>
插入到EMPLOYEE 中
♦ 拒絕(Reject):因為此插入運算的主鍵Ssn 是NULL,違
反「實體完整性限制」
♦ 詢問使用者:提供一個有效的Ssn值
☼ 將 <‘Alicia’, ‘J’, ‘Zelaya’, ‘999887777’, ‘1960-0405’, ‘6357 Windy Lane, Katy, TX’, F, 28000,
‘987654321’, 4>插入到EMPLOYEE 中
♦ 拒絕(Reject):因為此插入運算的主鍵Ssn 的值
‘999887777’已存在於EMPLOYEE中,違反「鍵值限制」
資料庫管理
31
插入運算─範例 (2/2)
☼ 將 <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ‘196004-05’, ‘6357 Windswept, Katy, TX’, F, 28000,
‘987654321’, 7> 插入到EMPLOYEE 中
♦ 詢問使用者:因為此插入運算的外來鍵Dno 值 7,違反
「參考完整性限制」(在DEPARTMENT中沒有Dnumber=7)
☼ 將 <‘Cecilia’, ‘F’, ‘Kolonsky’, ‘677678989’, ‘196004-05’, ‘6357 Windy Lane, Katy, TX’, F, 28000,
NULL, 4>插入到EMPLOYEE 中
♦ 接受(Accept):因為此插入運算滿足所有的限制
資料庫管理
32
刪除(delete)運算 (1/2)
☼ 刪除運算只可能會違反參考完整性限制
☼ 範例:
♦ 刪除Essn=‘999887777’與Pno=10的WORKS_ON值組
▫ 接受(Accept):會剛好刪除一個值組
♦ 刪除Ssn=‘999887777’的EMPLOYEE值組
▫ 不可接受(Not Accept):因為WORKS_ON中有值組
參考到此值組,若執行刪除會違反參考完整性限制
♦ 刪除Ssn=‘333445555’的EMPLOYEE值組
▫ 不可接受(Not Accept):因為EMPLOYEE,
DEPARTMENT, WORKS_ON與DEPENDENT等關
聯的值組都參考到該值組
資料庫管理
33
刪除(delete)運算 (2/2)
☼刪除運算導致違反限制時,有三種可能的
處理方式
♦ 拒絕(Reject)刪除
♦ 連鎖(Cascade)刪除:將會參考到被刪除值組
的值組也刪除
♦ 修改(update)屬性值:修改那些會導致違反情
況的參考屬性值,將它的值設定成NULL,或
改成參考到另外一個有效的值組
☼通常DBMS會讓使用者指定在限制被違反
時,該使用上述的那一種處理方式
資料庫管理
34
更新(Update)運算 (1/2)
☼ 將Ssn=‘999887777’的EMPLOYEE值組內的Salary屬
性修改為28000
♦ 可接受(Acceptable)
☼ 將Ssn=‘999887777’的EMPLOYEE值組內的Dno屬性
修改為1
♦ 可接受(Acceptable)
☼ 將Ssn=‘999887777’的EMPLOYEE值組內的Dno屬性
修改為7
♦ 不可接受(Unacceptable):違反參考完整性限制
☼ 將Ssn=‘999887777’的EMPLOYEE值組內的Ssn屬性
修改為’987654321’
♦ 不可接受(Acceptable):與另一個值組的主鍵值重複,違反
主鍵限制
▫ 其他值組也參考到Ssn的現存值,違反參考完整性限制
資料庫管理
35
更新(Update)運算 (2/2)
☼討論:
♦ 更新一個既「非主鍵」,也不是「外來鍵」的
屬性,通常不會有問題
▫ 只需檢查並確認新資料值是否為正確的資料
型態和定義域即可
♦ 若修改「主鍵」,就必須特別小心
▫ 因為主鍵是用來識別值組的,不可有重覆值
▫ 且可能發生插入與刪除運算時的相同問題
♦ 若修改「外來鍵」,要確定新的資料值在被參
考關聯中存在(或是NULL)
資料庫管理
36