版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第十章第十章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性q什么是數(shù)據(jù)庫的完整性什么是數(shù)據(jù)庫的完整性q完整性約束條件完整性約束條件 q完整性控制完整性控制qOracle的完整性的完整性完整性完整性l什么是數(shù)據(jù)庫的完整性什么是數(shù)據(jù)庫的完整性 數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性,防止不合語義的數(shù)據(jù)進入數(shù)據(jù)庫。例: 學生的年齡必須是整數(shù),取值范圍為14-29; 學生的性別只能是男或女; 學生的學號一定是唯一的; 學生所在的系必須是學校開設的系; 數(shù)據(jù)庫是否具備完整性關系到數(shù)據(jù)庫系統(tǒng)能否真實地反映現(xiàn)實世界,因此維護數(shù)據(jù)庫的完整性是非常重要的。完整性控制機制完整性控制機制l完整性約束條件定義機制完整性約束條件定義機制
2、完整性約束條件: 根據(jù)實際應用需求, 數(shù)據(jù)庫中的數(shù)據(jù)應滿足一些規(guī)定的條件。是數(shù)據(jù)模型的一個重要組成部分,它約束了數(shù)據(jù)庫中數(shù)據(jù)的語義 DBMS應提供手段讓用戶根據(jù)現(xiàn)實世界的語義定義數(shù)據(jù)庫的完整性約束條件,并把它們作為模式的一部分存入數(shù)據(jù)庫中l(wèi)完整性檢查機制完整性檢查機制 DBMS檢查用戶發(fā)出的操作請求是否違背了完整性約束條件l違約反應違約反應 如果發(fā)現(xiàn)用戶的操作請求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動作來保證數(shù)據(jù)的完整性提綱提綱q什么是數(shù)據(jù)庫的完整性什么是數(shù)據(jù)庫的完整性 完整性約束條件完整性約束條件 q完整性控制完整性控制qOracle的完整性的完整性完整性約束條件完整性約束條件l整個完整
3、性控制都是圍繞完整性約束條件進行的,從整個完整性控制都是圍繞完整性約束條件進行的,從這個角度說,完整性約束條件是完整性控制機制的核這個角度說,完整性約束條件是完整性控制機制的核心。心。完整性約束條件完整性約束條件作用的對象作用的對象l對象對象 列列l(wèi)對屬性的取值類型、范圍、精度等的約束條件對屬性的取值類型、范圍、精度等的約束條件 元組元組l對元組中各個屬性列間的聯(lián)系的約束對元組中各個屬性列間的聯(lián)系的約束 關系關系l對若干元組間、關系集合上以及關系之間的聯(lián)系的對若干元組間、關系集合上以及關系之間的聯(lián)系的約束約束完整性約束條件完整性約束條件作用的對象作用的對象l對象的狀態(tài)對象的狀態(tài) 靜態(tài)靜態(tài)l對靜
4、態(tài)對象的約束是反映數(shù)據(jù)庫狀態(tài)合理性的約束對靜態(tài)對象的約束是反映數(shù)據(jù)庫狀態(tài)合理性的約束l這是最重要的一類完整性約束這是最重要的一類完整性約束 動態(tài)動態(tài)l對動態(tài)對象的約束是反映數(shù)據(jù)庫狀態(tài)變遷的約束對動態(tài)對象的約束是反映數(shù)據(jù)庫狀態(tài)變遷的約束完整性約束條件分類完整性約束條件分類l值的約束值的約束 指對數(shù)據(jù)取值類型、范圍、精度等的規(guī)定, 例如對屬性規(guī)定某個值集, 規(guī)定屬性取值類型、格式(職工號第一位為字母, 后面是四位數(shù)字)l結(jié)構約束結(jié)構約束 指對數(shù)據(jù)之間聯(lián)系的限制, 以關系庫為例:同一關系的不同屬性之間可能滿足一定的約束條件(A1A2); 不同關系之間的屬性取值也可能要滿足一定的約束條件(外鍵取值)完
5、整性約束條件分類完整性約束條件分類l靜態(tài)約束靜態(tài)約束 指數(shù)據(jù)庫每一確定狀態(tài)的數(shù)據(jù)應滿足的約束條件指數(shù)據(jù)庫每一確定狀態(tài)的數(shù)據(jù)應滿足的約束條件, 例如外鍵約束等例如外鍵約束等l動態(tài)約束動態(tài)約束 指指DB從一種狀態(tài)轉(zhuǎn)變?yōu)榱硗庖环N狀態(tài)時從一種狀態(tài)轉(zhuǎn)變?yōu)榱硗庖环N狀態(tài)時, 新值和舊新值和舊值之間應滿足的約束條件值之間應滿足的約束條件, 例如工資調(diào)整時例如工資調(diào)整時, 要求新要求新工資不低于舊工資工資不低于舊工資)完整性約束條件完整性約束條件對象狀態(tài)對象狀態(tài) 動態(tài)列級約束動態(tài)列級約束 動態(tài)元組約束動態(tài)元組約束 動態(tài)關系約束動態(tài)關系約束 動態(tài)動態(tài) 靜態(tài)列級約束靜態(tài)列級約束 靜態(tài)元組約束靜態(tài)元組約束 靜態(tài)關系約
6、束靜態(tài)關系約束 靜態(tài)靜態(tài) 列列 元組元組 關系關系 對象粒度對象粒度完整性約束條件完整性約束條件 靜態(tài)列級約束靜態(tài)列級約束 靜態(tài)列級約束是對一個列的取值域的說明,這是最靜態(tài)列級約束是對一個列的取值域的說明,這是最常見最簡單同時也最容易實現(xiàn)的一類完整性約束常見最簡單同時也最容易實現(xiàn)的一類完整性約束完整性約束條件完整性約束條件 五類靜態(tài)列級約束五類靜態(tài)列級約束1) 對數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長度、單位、對數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長度、單位、精度等精度等 例:規(guī)定學生姓名的數(shù)據(jù)類型應為字符型,長度為例:規(guī)定學生姓名的數(shù)據(jù)類型應為字符型,長度為82) 對數(shù)據(jù)格式的約束對數(shù)據(jù)格式的約束例
7、:規(guī)定學號的格式為前兩位表示入學年份,后四位例:規(guī)定學號的格式為前兩位表示入學年份,后四位為順序編號。出生日期的格式為為順序編號。出生日期的格式為YY.MM.DD完整性約束條件完整性約束條件3) 對取值范圍或取值集合的約束對取值范圍或取值集合的約束例:規(guī)定成績的取值范圍為例:規(guī)定成績的取值范圍為0-100,年齡的取值范,年齡的取值范圍為圍為14-29,性別的取值集合為,性別的取值集合為男男,女女。4) 對空值的約束對空值的約束空值表示未定義或未知的值,它與零值和空格不同。空值表示未定義或未知的值,它與零值和空格不同。有的列允許空值,有的則不允許。例如規(guī)定成績可有的列允許空值,有的則不允許。例如
8、規(guī)定成績可以為空值。以為空值。5) 其他約束其他約束例:關于列的排序說明,組合列等。例:關于列的排序說明,組合列等。完整性約束條件完整性約束條件 靜態(tài)元組約束靜態(tài)元組約束 靜態(tài)元組約束就是規(guī)定組成一個元組的各個列之間靜態(tài)元組約束就是規(guī)定組成一個元組的各個列之間的約束關系。的約束關系。例如:例如: 訂貨關系中包含發(fā)貨量、訂貨量等列,發(fā)貨量不得訂貨關系中包含發(fā)貨量、訂貨量等列,發(fā)貨量不得超過訂貨量超過訂貨量 教師關系中包含職稱、工資等列,教授的工資不得教師關系中包含職稱、工資等列,教授的工資不得低于指定的值低于指定的值 靜態(tài)元組約束只局限在單個元組上靜態(tài)元組約束只局限在單個元組上 完整性約束條件完
9、整性約束條件 靜態(tài)關系約束靜態(tài)關系約束 在一個關系的各個元組之間或者若干關系之間常常在一個關系的各個元組之間或者若干關系之間常常存在各種聯(lián)系或約束存在各種聯(lián)系或約束 常見靜態(tài)關系約束常見靜態(tài)關系約束1) 實體完整性約束實體完整性約束2) 參照完整性約束參照完整性約束3) 函數(shù)依賴約束函數(shù)依賴約束 見見11章章4) 統(tǒng)計約束統(tǒng)計約束完整性約束條件完整性約束條件 統(tǒng)計約束統(tǒng)計約束l定義某個字段值與一個關系多個元組的統(tǒng)計值之定義某個字段值與一個關系多個元組的統(tǒng)計值之間的約束關系間的約束關系例:規(guī)定部門經(jīng)理的工資不得高于本部門職工平均例:規(guī)定部門經(jīng)理的工資不得高于本部門職工平均工資的工資的5倍,不得低
10、于本部門職工平均工資的倍,不得低于本部門職工平均工資的2倍。倍。本部門職工的平均工資值是一個統(tǒng)計計算值本部門職工的平均工資值是一個統(tǒng)計計算值完整性約束條件完整性約束條件 動態(tài)列級約束動態(tài)列級約束 動態(tài)列級約束是修改列定義或列值時應滿足的約束條件動態(tài)列級約束是修改列定義或列值時應滿足的約束條件 常見動態(tài)列級約束常見動態(tài)列級約束1) 修改列定義時的約束修改列定義時的約束例:規(guī)定將原來允許空值的列改為不允許空值時,例:規(guī)定將原來允許空值的列改為不允許空值時,如果該列目前已存在空值,則拒絕這種修改。如果該列目前已存在空值,則拒絕這種修改。 2) 修改列值時的約束修改列值時的約束l修改列值有時需要參照其
11、舊值,并且新舊值之間需修改列值有時需要參照其舊值,并且新舊值之間需要滿足某種約束條件。要滿足某種約束條件。 例:職工工資調(diào)整不得低于其原來工資,學生年齡例:職工工資調(diào)整不得低于其原來工資,學生年齡只能增長只能增長完整性約束條件完整性約束條件 動態(tài)元組約束動態(tài)元組約束 動態(tài)元組約束是指修改某個元組的值時需要參照其動態(tài)元組約束是指修改某個元組的值時需要參照其舊值,并且新舊值之間需要滿足某種約束條件。舊值,并且新舊值之間需要滿足某種約束條件。例例: 職工工資調(diào)整不得低于其原來工資職工工資調(diào)整不得低于其原來工資+工齡工齡*1.5完整性約束條件完整性約束條件 動態(tài)關系約束動態(tài)關系約束 動態(tài)關系約束是加在
12、關系變化前后狀態(tài)上的限制條件動態(tài)關系約束是加在關系變化前后狀態(tài)上的限制條件例:事務一致性、原子性等約束條件例:事務一致性、原子性等約束條件完整性約束條件完整性約束條件l完整性約束條件小結(jié)完整性約束條件小結(jié) 粒粒 度度狀態(tài)狀態(tài)列列 級級 元元 組組 級級 關關 系系 級級 靜靜 態(tài)態(tài) 列定義列定義類型類型格式格式值域值域 空值空值 元組值應滿足元組值應滿足的條件的條件 實體完整性約束實體完整性約束 參照完整性約束參照完整性約束 函數(shù)依賴約束函數(shù)依賴約束 統(tǒng)計約束統(tǒng)計約束 動動 態(tài)態(tài) 改變列定改變列定義或列值義或列值 元組新舊值之元組新舊值之間應滿足的約間應滿足的約束條件束條件 關系新舊狀態(tài)間應關
13、系新舊狀態(tài)間應滿足的約束條件滿足的約束條件 提綱提綱q什么是數(shù)據(jù)庫的完整性什么是數(shù)據(jù)庫的完整性q完整性約束條件完整性約束條件 完整性控制完整性控制qOracle的完整性的完整性完整性控制完整性控制lDBMS的完整性控制機制的完整性控制機制l關系系統(tǒng)三類完整性的實現(xiàn)關系系統(tǒng)三類完整性的實現(xiàn)l參照完整性的實現(xiàn)參照完整性的實現(xiàn)DBMS的完整性控制機制的完整性控制機制lDBMS的完整性控制機制的主要功能的完整性控制機制的主要功能定義功能定義功能允許用戶定義各類完整性約束條件允許用戶定義各類完整性約束條件檢查功能檢查功能l檢查用戶提供的請求是否違背了完整性約束條件檢查用戶提供的請求是否違背了完整性約束條
14、件違約反應違約反應l如果發(fā)現(xiàn)用戶的操作違背了完整性約束條件如果發(fā)現(xiàn)用戶的操作違背了完整性約束條件, 則則采取一定的動作來保證數(shù)據(jù)的完整性采取一定的動作來保證數(shù)據(jù)的完整性(一般是取消一般是取消該事務已產(chǎn)生的影響該事務已產(chǎn)生的影響-恢復恢復)DBMS的完整性控制機制的完整性控制機制l檢查功能檢查功能 立即執(zhí)行的約束(Immediate constraints)l檢查是否違背完整性約束的時機通常是在一條語句或事務執(zhí)行完后立即檢查 延遲執(zhí)行的約束(Deferred constraints)l在某些情況下,完整性檢查需要延遲到整個事務執(zhí)行結(jié)束后再進行完整性約束條件完整性約束條件例例1: begin tr
15、ansaction update Students set Sno=95012 where Sno=95001; update SC set Sno=95012 where Sno=95001; commit如是立即執(zhí)行約束如是立即執(zhí)行約束, 事務不能成功執(zhí)行事務不能成功執(zhí)行如是延遲執(zhí)行約束如是延遲執(zhí)行約束, 事務可以成功執(zhí)行事務可以成功執(zhí)行DBMS的完整性控制機制的完整性控制機制例例2:銀行數(shù)據(jù)庫中:銀行數(shù)據(jù)庫中“借貸總金額應平衡借貸總金額應平衡”的約束就應該的約束就應該是延遲執(zhí)行的約束是延遲執(zhí)行的約束 從賬號從賬號A轉(zhuǎn)一筆錢到賬號轉(zhuǎn)一筆錢到賬號B為一個事務,從賬號為一個事務,從賬號A轉(zhuǎn)轉(zhuǎn)出
16、去錢后賬就不平了,必須等轉(zhuǎn)入賬號出去錢后賬就不平了,必須等轉(zhuǎn)入賬號B后賬才能后賬才能重新平衡,這時才能進行完整性檢查。重新平衡,這時才能進行完整性檢查。DBMS的完整性控制機制的完整性控制機制l違約反應違約反應 拒絕該操作 其他處理方法DBMS的完整性控制機制的完整性控制機制l完整性規(guī)則的形式化表述完整性規(guī)則的形式化表述一條完整性規(guī)則可以用一個五元組表示一條完整性規(guī)則可以用一個五元組表示:(D,O,A,C,P) D(Data) 約束作用的約束作用的數(shù)據(jù)對象數(shù)據(jù)對象; O(Operation) 觸發(fā)完整性檢查的觸發(fā)完整性檢查的數(shù)據(jù)庫操作數(shù)據(jù)庫操作,即,即當用戶發(fā)出什么操作請求時需要檢查該完整性規(guī)
17、則,當用戶發(fā)出什么操作請求時需要檢查該完整性規(guī)則,是立即檢查還是延遲檢查;是立即檢查還是延遲檢查; A(Assertion) 數(shù)據(jù)對象必須滿足的數(shù)據(jù)對象必須滿足的斷言斷言或或語義約語義約束束,這是規(guī)則的主體;,這是規(guī)則的主體; C(Condition) 選擇選擇A作用的數(shù)據(jù)對象值的作用的數(shù)據(jù)對象值的謂詞謂詞; P(Procedure) 違反完整性規(guī)則時觸發(fā)的違反完整性規(guī)則時觸發(fā)的過程過程。DBMS的完整性控制機制的完整性控制機制例例1:在:在“學號不能為空學號不能為空”的約束中的約束中D 約束作用的對象為約束作用的對象為Sno屬性屬性O 插入或修改插入或修改Student 元組時元組時A Sn
18、o不能為空不能為空C 無(無(A可作用于所有記錄的可作用于所有記錄的Sno屬性)屬性)P 拒絕執(zhí)行該操作拒絕執(zhí)行該操作DBMS的完整性控制機制的完整性控制機制例例2:在:在“教授工資不得低于教授工資不得低于6000元元”的約束中的約束中D 約束作用的對象為工資約束作用的對象為工資Sal屬性屬性O 插入或修改職工元組時插入或修改職工元組時A Sal不能小于不能小于6000C 職稱職稱=教授教授 (A僅作用于職稱僅作用于職稱=教授教授的記錄的記錄)P 拒絕執(zhí)行該操作拒絕執(zhí)行該操作關系系統(tǒng)三類完整性的實現(xiàn)關系系統(tǒng)三類完整性的實現(xiàn)l目前許多關系數(shù)據(jù)庫系統(tǒng)都提供了定義和檢查實體完目前許多關系數(shù)據(jù)庫系統(tǒng)都
19、提供了定義和檢查實體完整性、參照完整性和用戶定義的完整性的功能。整性、參照完整性和用戶定義的完整性的功能。l對于對于違反實體完整性違反實體完整性規(guī)則和用戶定義的完整性規(guī)則的規(guī)則和用戶定義的完整性規(guī)則的操作操作一般都是采用拒絕執(zhí)行一般都是采用拒絕執(zhí)行的方式進行處理。的方式進行處理。l而對于而對于違反參照完整性違反參照完整性的操作,并不都是簡單地拒絕的操作,并不都是簡單地拒絕執(zhí)行,有時還需要采取另一種方法,即接受這個操作,執(zhí)行,有時還需要采取另一種方法,即接受這個操作,同時執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫的狀態(tài)仍然同時執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫的狀態(tài)仍然是正確的。是正確的。參照完整性的實現(xiàn)參
20、照完整性的實現(xiàn)例例:職工部門數(shù)據(jù)庫包含職工表職工部門數(shù)據(jù)庫包含職工表EMP和部門表和部門表DEPTDEPT關系的主碼為部門號關系的主碼為部門號DeptnoEMP關系的主碼為職工號關系的主碼為職工號Empno, 外碼為部門號外碼為部門號Deptno該該Deptno與與DEPT關系中關系中Deptno相對應相對應稱稱DEPT為被參照關系或目標關系,為被參照關系或目標關系,EMP為參照關系為參照關系RDBMS實現(xiàn)參照完整性時需要考慮實現(xiàn)參照完整性時需要考慮的的4個方面?zhèn)€方面l(1) 外碼是否可以接受空值的問題外碼是否可以接受空值的問題 外碼是否能夠取空值是依賴于應用環(huán)境的語義的外碼是否能夠取空值是依
21、賴于應用環(huán)境的語義的 在實現(xiàn)參照完整性時,系統(tǒng)除了應該提供定義外碼在實現(xiàn)參照完整性時,系統(tǒng)除了應該提供定義外碼的機制,還應提供定義外碼列是否允許空值的機制的機制,還應提供定義外碼列是否允許空值的機制例例1:在職工部門數(shù)據(jù)庫中,:在職工部門數(shù)據(jù)庫中,EMP關系包含有外碼關系包含有外碼Deptno,某一元組的這一列若為空值,表示這個職工,某一元組的這一列若為空值,表示這個職工尚未分配到任何具體的部門工作。這和應用環(huán)境的語尚未分配到任何具體的部門工作。這和應用環(huán)境的語義是相符的,因此義是相符的,因此EMP的的Deptno列應允許空值。列應允許空值。RDBMS實現(xiàn)參照完整性時需要考慮實現(xiàn)參照完整性時需
22、要考慮的的4個方面?zhèn)€方面例例2:在學生選課數(shù)據(jù)庫中,:在學生選課數(shù)據(jù)庫中,Student關系為被參照關關系為被參照關系,其主碼為系,其主碼為Sno。SC為參照關系,外碼為為參照關系,外碼為Sno。 若若SC的的Sno為空值,則表明尚不存在的某個學生,或為空值,則表明尚不存在的某個學生,或者某個不知學號的學生,選修了某門課程,其成績記者某個不知學號的學生,選修了某門課程,其成績記錄在錄在Grade列中。這與學校的應用環(huán)境是不相符的,列中。這與學校的應用環(huán)境是不相符的,因此因此SC的的Sno列不能取空值。列不能取空值。RDBMS實現(xiàn)參照完整性時需要考慮實現(xiàn)參照完整性時需要考慮的的4個方面?zhèn)€方面l(
23、2) 刪除被參照關系的元組時的問題刪除被參照關系的元組時的問題 出現(xiàn)違約操作的情形出現(xiàn)違約操作的情形l需要刪除被參照關系的某個元組,而參照關系有需要刪除被參照關系的某個元組,而參照關系有若干元組的外碼值與被刪除的被參照關系的主碼若干元組的外碼值與被刪除的被參照關系的主碼值相對應值相對應 違約反應違約反應:可有三種策略:可有三種策略l級聯(lián)刪除(級聯(lián)刪除(CASCADES)l受限刪除(受限刪除(RESTRICTED)l置空值刪除(置空值刪除(NULLIFIES)三種處理方法,哪一種是正確的,要依應用環(huán)境的語三種處理方法,哪一種是正確的,要依應用環(huán)境的語義來定。義來定。RDBMS實現(xiàn)參照完整性時需要
24、考慮實現(xiàn)參照完整性時需要考慮的的4個方面?zhèn)€方面 級聯(lián)刪除級聯(lián)刪除l將參照關系中所有外碼值與被參照關系中要刪除將參照關系中所有外碼值與被參照關系中要刪除元組主碼值相對應的元組一起刪除。元組主碼值相對應的元組一起刪除。 受限刪除受限刪除l只有當參照關系中沒有任何元組的外碼值與要刪只有當參照關系中沒有任何元組的外碼值與要刪除的被參照關系的元組的主碼值相對應時,系統(tǒng)除的被參照關系的元組的主碼值相對應時,系統(tǒng)才執(zhí)行刪除操作,否則拒絕此刪除操作。才執(zhí)行刪除操作,否則拒絕此刪除操作。 置空值刪除置空值刪除l刪除被參照關系的元組,并將參照關系中所有與刪除被參照關系的元組,并將參照關系中所有與被參照關系中被刪除
25、元組主碼值相等的外碼值置被參照關系中被刪除元組主碼值相等的外碼值置為空值為空值RDBMS實現(xiàn)參照完整性時需要考慮實現(xiàn)參照完整性時需要考慮的的4個方面?zhèn)€方面例:要刪除例:要刪除Student關系中關系中Sno=950001的元組,的元組, 而而SC關系中有關系中有4個元組的個元組的Sno都等于都等于950001。 級聯(lián)刪除級聯(lián)刪除:將:將SC關系中所有關系中所有4個個Sno=950001的元的元組一起刪除。如果參照關系同時又是另一個關系的組一起刪除。如果參照關系同時又是另一個關系的被參照關系,則這種刪除操作會繼續(xù)級聯(lián)下去。被參照關系,則這種刪除操作會繼續(xù)級聯(lián)下去。 受限刪除受限刪除:系統(tǒng)將拒絕執(zhí)
26、行此刪除操作:系統(tǒng)將拒絕執(zhí)行此刪除操作 置空值刪除置空值刪除:將:將SC關系中所有關系中所有Sno=950001的元組的元組的的Sno值置為空值值置為空值 (不符合應用語義不符合應用語義)RDBMS實現(xiàn)參照完整性時需要考慮實現(xiàn)參照完整性時需要考慮的的4個方面?zhèn)€方面l(3) 修改被參照關系中主碼的問題修改被參照關系中主碼的問題 1)不允許修改主碼策略不允許修改主碼策略 2)允許修改主碼策略允許修改主碼策略l違約操作違約操作要修改要修改被參照關系被參照關系中某些元組的主碼值,而中某些元組的主碼值,而參照關系中有些元組的外碼值正好等于被參參照關系中有些元組的外碼值正好等于被參照關系要修改的主碼值照關
27、系要修改的主碼值要修改要修改參照關系參照關系中某些元組的主碼值,而被中某些元組的主碼值,而被參照關系中沒有任何元組的外碼值等于被參參照關系中沒有任何元組的外碼值等于被參照關系修改后的主碼值照關系修改后的主碼值 RDBMS實現(xiàn)參照完整性時需要考實現(xiàn)參照完整性時需要考慮的慮的4個方面?zhèn)€方面l(3) 修改被參照關系中主碼的問題修改被參照關系中主碼的問題 1)不允許修改主碼策略不允許修改主碼策略 2)允許修改主碼策略允許修改主碼策略l違約反應違約反應(一一)修改的關系是被參照關系:與刪除類似修改的關系是被參照關系:與刪除類似l級聯(lián)修改級聯(lián)修改l受限修改受限修改l置空值修改置空值修改RDBMS實現(xiàn)參照完
28、整性時需要考慮實現(xiàn)參照完整性時需要考慮的的4個方面?zhèn)€方面l違約反應違約反應 級聯(lián)修改級聯(lián)修改l修改被參照關系中主碼值同時,用相同的方法修修改被參照關系中主碼值同時,用相同的方法修改參照關系中相應的外碼值。改參照關系中相應的外碼值。 受限修改受限修改l拒絕此修改操作。只當參照關系中沒有任何元組拒絕此修改操作。只當參照關系中沒有任何元組的外碼值等于被參照關系中某個元組的主碼值時,的外碼值等于被參照關系中某個元組的主碼值時,這個元組的主碼值才能被修改。這個元組的主碼值才能被修改。 置空值修改置空值修改l修改被參照關系中主碼值,同時將參照關系中相修改被參照關系中主碼值,同時將參照關系中相應的外碼值置為
29、空值。應的外碼值置為空值。RDBMS實現(xiàn)參照完整性時需要考慮實現(xiàn)參照完整性時需要考慮的的4個方面?zhèn)€方面 例:學生例:學生950001休學一年后復學,這時需要將休學一年后復學,這時需要將Student關系中關系中Sno=950001的元組中的元組中Sno值改為值改為960123。而。而SC關系中有關系中有4個元組的個元組的Sno=950001l級聯(lián)修改級聯(lián)修改:將:將SC關系中關系中4個個Sno=950001元組中的元組中的Sno值也改值也改為為960123。如果參照關系同時又是另一個關系的被參照關系,。如果參照關系同時又是另一個關系的被參照關系,則這種修改操作會繼續(xù)級聯(lián)下去則這種修改操作會繼續(xù)
30、級聯(lián)下去l受限修改受限修改:只有:只有SC中沒有任何元組的中沒有任何元組的Sno=950001時,才能時,才能修改修改Student表中表中Sno=950001的元組的的元組的Sno值改為值改為960123l置空值修改置空值修改:將:將Student表中表中Sno=950001的元組的的元組的Sno值改值改為為960123。而將。而將S表中所有表中所有Sno=950001的元組的的元組的Sno值置為值置為空值空值l在學生選課數(shù)據(jù)庫中只有第一種方法是正確的在學生選課數(shù)據(jù)庫中只有第一種方法是正確的RDBMS實現(xiàn)參照完整性時需要考實現(xiàn)參照完整性時需要考慮的慮的4個方面?zhèn)€方面l(3) 修改被參照關系中
31、主碼的問題修改被參照關系中主碼的問題 1)不允許修改主碼策略不允許修改主碼策略 2)允許修改主碼策略允許修改主碼策略l違約反應違約反應(二二)修改的關系是參照關系:與插入類似修改的關系是參照關系:與插入類似l受限修改受限修改l遞歸修改遞歸修改參照完整性的實現(xiàn)參照完整性的實現(xiàn)l結(jié)論結(jié)論 RDBMS在實現(xiàn)參照完整性時,除了需要向用戶提在實現(xiàn)參照完整性時,除了需要向用戶提供定義主碼、外碼的機制外,還需要向用戶提供按供定義主碼、外碼的機制外,還需要向用戶提供按照自己的應用要求選擇處理依賴關系中對應的元組照自己的應用要求選擇處理依賴關系中對應的元組的方法。的方法。提綱提綱q什么是數(shù)據(jù)庫的完整性什么是數(shù)據(jù)
32、庫的完整性q完整性約束條件完整性約束條件 q完整性控制完整性控制 Oracle的完整性的完整性Oracle的完整性的完整性lOracle中的實體完整性中的實體完整性lOracle中的參照完整性中的參照完整性lOracle中用戶定義的完整性中用戶定義的完整性ORACLE中的實體完整性中的實體完整性lORACLE在在CREATE TABLE語句中提供了語句中提供了PRIMARY KEY子句,供用戶在建表時指定關系的主碼列子句,供用戶在建表時指定關系的主碼列 在列級使用PRIMARY KEY子句 在表級使用PRIMARY KEY子句 ORACLE中的實體完整性中的實體完整性例例1:在學生選課數(shù)據(jù)庫中
33、,要定義:在學生選課數(shù)據(jù)庫中,要定義Student表的表的Sno屬性為主碼屬性為主碼 CREATE TABLE Student (Sno NUMBER(8), Sname VARCHAR(20), Sage NUMBER(20), CONSTRAINT PK_SNO PRIMARY KEY (Sno); 或或: CREATE TABLE Student (Sno NUMBER(8) PRIMARY KEY, Sname VARCHAR(20), Sage NUMBER(20);ORACLE中的實體完整性中的實體完整性例例2:要在:要在SC表中定義表中定義(Sno, Cno)為主碼為主碼 CRE
34、ATE TABLE SC (Sno NUMBER(8), Cno NUMBER(2), Grade NUMBER(2), CONSTRAINT PK_SC PRIMARY KEY (Sno, Cno);ORACLE中的實體完整性中的實體完整性l在用在用PRIMARY KEY語句定義了關系的主碼后,語句定義了關系的主碼后,每當用戶程序?qū)χ鞔a列進行更新操作時,系統(tǒng)每當用戶程序?qū)χ鞔a列進行更新操作時,系統(tǒng)自動進行完整性檢查自動進行完整性檢查 違約操作違約操作l使主屬性值為空值的操作使主屬性值為空值的操作l使主碼值在表中不唯一的操作使主碼值在表中不唯一的操作 違約反應違約反應l系統(tǒng)拒絕此操作,從而保證
35、了實體完整性系統(tǒng)拒絕此操作,從而保證了實體完整性ORACLE中的參照完整性中的參照完整性lORACLE的的CREATE TABLE語句允許用戶定義參照語句允許用戶定義參照完整性完整性 用用FOREIGN KEY子句定義哪些列為外碼列子句定義哪些列為外碼列 用用REFERENCES子句指明這些外碼相應于哪個表子句指明這些外碼相應于哪個表的主碼的主碼 用用ON DELETE CASCADE短語指明在刪除被參照短語指明在刪除被參照關系的元組時,同時刪除參照關系中外碼值等于被關系的元組時,同時刪除參照關系中外碼值等于被刪除的被參照關系的元組中主碼值的元組刪除的被參照關系的元組中主碼值的元組ORACLE
36、中的參照完整性中的參照完整性例例1:建立表:建立表EMP表表 CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2), CONSTRAINT FK_DEPTNO FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno) ON DELETE CASCADE);ORACLE中的參照完整性中的參照完整性或:或: CREATE TABLE EMP (Empno NUMBER(4), Ena
37、me VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2) CONSTRAINT FK_DEPTNO FOREIGN KEY REFERENCES DEPT(Deptno) ON DELETE CASCADE);ORACLE中的參照完整性中的參照完整性 這時這時EMP表中外碼為表中外碼為Deptno,它相應于,它相應于DEPT表中表中的主碼的主碼Deptno。 當要修改當要修改DEPT表中的表中的DEPTNO值時,先要檢查值時,先要檢查EMP表中有無元組的表中有無元組的Deptno值與之對應
38、值與之對應l若沒有,系統(tǒng)接受這個修改操作若沒有,系統(tǒng)接受這個修改操作l否則,系統(tǒng)拒絕此操作否則,系統(tǒng)拒絕此操作 ORACLE中的參照完整性中的參照完整性 當要刪除當要刪除DEPT表中某個元組時,系統(tǒng)要檢查表中某個元組時,系統(tǒng)要檢查EMP表,若找到相應元組即將其隨之刪除。表,若找到相應元組即將其隨之刪除。 當要插入當要插入EMP表中某個元組時,系統(tǒng)要檢查表中某個元組時,系統(tǒng)要檢查DEPT表,先要檢查表,先要檢查DEPT表中有無元組的表中有無元組的Deptno值與之值與之對應對應l若沒有,系統(tǒng)拒絕此插入操作若沒有,系統(tǒng)拒絕此插入操作l否則,系統(tǒng)接受此操作否則,系統(tǒng)接受此操作ORACLE中的用戶定義
39、的完整性中的用戶定義的完整性lORACLE中定義用戶完整性的兩類方法中定義用戶完整性的兩類方法 (1) 用用CREATE TABLE語句在建表時定義用戶完整語句在建表時定義用戶完整性約束性約束 (2) 使用使用alter table (3) 通過觸發(fā)器來定義用戶的完整性規(guī)則通過觸發(fā)器來定義用戶的完整性規(guī)則ORACLE中的用戶定義的完整性中的用戶定義的完整性l(1) 用用CREATE TABLE語句在建表時定義用戶完整性約束語句在建表時定義用戶完整性約束 可定義三類完整性約束可定義三類完整性約束l列值非空(列值非空(NOT NULL短語)短語)l列值唯一(列值唯一(UNIQUE短語)短語)l檢查
40、列值是否滿足一個布爾表達式(檢查列值是否滿足一個布爾表達式(CHECK短語)短語)ORACLE中的用戶定義的完整性中的用戶定義的完整性例例1:建立部門表:建立部門表DEPT,要求部門名稱,要求部門名稱Dname列取值唯一,列取值唯一,部門編號部門編號Deptno列為主碼列為主碼CREATE TABLE DEPT(Deptno NUMBER,Dname VARCHAR(9) CONSTRAINT U1 UNIQUE,Loc VARCHAR(10),CONSTRAINT PK_DEPT PRIMARY KEY (Deptno);其中其中 CONSTRAINT U1 UNIQUE 表示約束名為表示約
41、束名為U1,該約束要求該約束要求Dname列值唯一。列值唯一。ORACLE中的用戶定義的完整性中的用戶定義的完整性例例2: 建立學生登記表建立學生登記表Student,要求學號在,要求學號在900000至至999999之之間,年齡間,年齡29,性別只能是,性別只能是男男或或女女,姓名非空,姓名非空CREATE TABLE Student(Sno NUMBER(5) CONSTRAINT C1 CHECK (Sno BETWEEN 10000 AND 99999), Sname VARCHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMBER(3) CONSTRAI
42、NT C3 CHECK (Sage 29), Ssex VARCHAR(2) CONSTRAINT C4 CHECK (Ssex IN (男男, 女女);ORACLE中的用戶定義的完整性中的用戶定義的完整性例例3 :建立職工表:建立職工表EMP,要求每個職工的應發(fā)工資不得超過,要求每個職工的應發(fā)工資不得超過3000元。應發(fā)工資實際上就是實發(fā)工資列元。應發(fā)工資實際上就是實發(fā)工資列Sal與扣除項與扣除項Deduct之和。之和。 CREATE TABLE EMP (Eno NUMBER(4) Ename VARCHAR(10), Job VARCHAR(8), Sal NUMBER(7,2), De
43、duct NUMBER(7,2) Deptno NUMBER(2), CONSTRAINTS C1 CHECK (Sal + Deduct =3000);ORACLE中的用戶定義的完整性中的用戶定義的完整性l(2) 使用使用alter table例例1:修改缺省值:修改缺省值原來原來: create table Students(, sex char(1) default M);替換替換: alter table Students replace sex default FORACLE中的用戶定義的完整性中的用戶定義的完整性l(2) 使用使用alter table修改缺省值修改缺省值原來原來:
44、 create table Students(, sex char(1) default M);替換替換: alter table Students replace sex default F;增加約束增加約束 alter table Students add constraint chk_SA check (SA30);刪除已有約束刪除已有約束 alter table Students drop constraint chk_SA;ORACLE中的用戶定義的完整性中的用戶定義的完整性l(3) 通過通過觸發(fā)器(觸發(fā)器(Trigger)來定義用戶的完整性規(guī)則來定義用戶的完整性規(guī)則 觸發(fā)器觸發(fā)器是
45、一種特殊類型的存儲過程,通過是一種特殊類型的存儲過程,通過事件(插事件(插入、刪除和更新)入、刪除和更新)觸發(fā)執(zhí)行觸發(fā)執(zhí)行 是實現(xiàn)復雜完整性約束的有效方法是實現(xiàn)復雜完整性約束的有效方法 在應用中的其他作用在應用中的其他作用l維護復制數(shù)據(jù)、保持導出數(shù)據(jù)列的當前值(自動維護復制數(shù)據(jù)、保持導出數(shù)據(jù)列的當前值(自動更新導出列)、業(yè)務規(guī)則限制(書價不許一次提更新導出列)、業(yè)務規(guī)則限制(書價不許一次提價超過價超過10%)、實現(xiàn)定制記錄(監(jiān)控:不許周六、)、實現(xiàn)定制記錄(監(jiān)控:不許周六、周日插入表,銀行必須記錄大于周日插入表,銀行必須記錄大于10000的事務的事務等。)等。)ORACLE中的用戶定義的完整性中的用戶定義的完整性l(3) 通過通過觸發(fā)器(觸發(fā)器(Trigger)來定義用戶的完整性規(guī)則來定義用戶的完整性規(guī)則 三部分三部分l事件:激活觸發(fā)器事件:激活觸發(fā)器l條件:測試觸發(fā)器是否滿足運行的條件條件:測試觸發(fā)器是否滿足運行的條件l動作:觸發(fā)器運行后執(zhí)行的動作動作:觸發(fā)器運行后執(zhí)行的動作 數(shù)據(jù)庫觸發(fā)器是一類靠事件驅(qū)動的特殊過程,一旦由某數(shù)據(jù)庫觸發(fā)器是一類靠事件驅(qū)動的特殊過程,一旦由某個用戶定義,任何用戶對該數(shù)據(jù)的增、刪、改操作均由個用戶定義,任何用戶對該數(shù)據(jù)的增、刪、改操作均由服務器自動激活相應的觸發(fā)子,在核心層進行集中的完服務器自動激活相應的觸發(fā)子,在核心層進行集
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《焊接標準》教學大綱
- 廣西理論知識和業(yè)務規(guī)范考題
- 建筑裝飾材料與設計教案
- 家教教案(教師版)必修一第三章
- 玉溪師范學院《社會政策》2022-2023學年第一學期期末試卷
- 玉溪師范學院《馬克思主義經(jīng)典文獻導讀》2023-2024學年第一學期期末試卷
- 冀教版六年級下冊英語全冊教案
- 2下第二單元課件
- 2024年鹽業(yè)項目綜合評估報告
- 2023年微電子組件項目綜合評估報告
- 排洪渠道清淤施工方案
- 北科大巖石力學-李長洪1.2-巖石的力學性質(zhì)
- 國開(河北)2024年秋《現(xiàn)代產(chǎn)權法律制度專題》形考作業(yè)1-4答案
- 2024-2030年度假酒店項目融資商業(yè)計劃書
- 新商科“專業(yè)-產(chǎn)業(yè)雙鏈融通式”人才培養(yǎng)模式探究
- 2024年重慶新版勞動合同范本
- 公務員2018年國考《申論》真題卷及答案(副省級)
- 2024年基金從業(yè)資格證(含三個科目)考前必刷必練題庫500題(含真題、必會題)
- 2024年海南瓊中黎族苗族自治縣招聘事業(yè)單位人員17人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 水利基建項目內(nèi)部審計方法與技巧培訓
- 路燈改造施工方案
評論
0/150
提交評論