第五章 數據庫完整性精_第1頁
第五章 數據庫完整性精_第2頁
第五章 數據庫完整性精_第3頁
第五章 數據庫完整性精_第4頁
第五章 數據庫完整性精_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

AnIntroductiontoDatabaseSystem數據庫系統(tǒng)原理AnIntroductiontoDatabaseSystem第五章數據庫完整性AnIntroductiontoDatabaseSystem綜合統(tǒng)一(操縱三級模式)SQL視圖1視圖2基表1基表2基表3基表4存儲文件1存儲文件2外模式模式內模式數據安全數據完整性AnIntroductiontoDatabaseSystem什么是數據庫的完整性?數據的正確性和相容性防止不合語義的數據進入數據庫。例:學生的年齡必須是整數,取值范圍為14--29;學生的性別只能是男或女;學生的學號一定是唯一的;學生所在的系必須是學校開設的系;完整性:是否真實地反映現實世界AnIntroductiontoDatabaseSystem什么是完整性控制機制?1.完整性約束條件定義機制2.完整性檢查機制3.違約處理AnIntroductiontoDatabaseSystem1.完整性約束條件定義完整性約束條件:數據模型的組成部分,約束數據庫中數據的語義DBMS應提供定義數據庫完整性約束條件,并把它們作為模式的一部分存入數據庫中由SQL的DDL語句實現AnIntroductiontoDatabaseSystem2。完整性檢查機制檢查用戶發(fā)出的操作請求是否違背了完整性約束條件在INSERT、UPDATE、DELETE語句執(zhí)行時進行檢查AnIntroductiontoDatabaseSystem3。違約處理如果發(fā)現用戶的操作請求使數據違背了完整性約束條件,則采取一定的動作來保證數據的完整性。拒絕(NOACTION)、級連(CASCADE)AnIntroductiontoDatabaseSystem1.完整性約束條件作用的對象列:對屬性的取值類型、范圍、精度等的約束條件元組:對元組中各個屬性列間的聯系的約束關系:對若干元組間、關系集合上以及關系之間的聯系的約束AnIntroductiontoDatabaseSystem2.完整性約束條件分類靜態(tài)對靜態(tài)對象的約束是反映數據庫狀態(tài)合理性的約束動態(tài)對動態(tài)對象的約束是反映數據庫狀態(tài)變遷的約束AnIntroductiontoDatabaseSystem第五章數據庫完整性5.1實體完整性5.2參照完整性5.3用戶自定義完整性5.4觸發(fā)器AnIntroductiontoDatabaseSystem實體完整性定義實體完整性:實體完整性規(guī)則(EntityIntegrity)若屬性A是基本關系R的主屬性,則屬性A不能取空值AnIntroductiontoDatabaseSystem實體完整性實現在CREATETABLE語句中提供了PRIMARYKEY子句,供用戶在建表時指定關系的主碼列。在列級使用PRIMARYKEY子句在表級使用PRIMARYKEY子句

AnIntroductiontoDatabaseSystem例1:在學生選課數據庫中,要定義Student表的Sno屬性為主碼實體完整性實現CREATETABLEStudent(SnoCHAR(5)primarykey,SnameVARCHAR(10),SsexCHAR(2),SageINT,SdeptCHAR(2));

AnIntroductiontoDatabaseSystem例2:要在SC表中定義(Sno,Cno)為主碼實體完整性實現CREATETABLESC(SnoCHAR(5),CnoCHAR(1),GradeINT,primarykey(Sno,Cno));AnIntroductiontoDatabaseSystem用戶程序對主碼列進行更新操作時,系統(tǒng)自動進行完整性檢查違約操作使主屬性值為空值的操作使主碼值在表中不唯一的操作違約反應系統(tǒng)拒絕此操作,從而保證了實體完整性實體完整性實現AnIntroductiontoDatabaseSystem第五章數據庫完整性5.1實體完整性5.2參照完整性5.3用戶自定義完整性5.4觸發(fā)器AnIntroductiontoDatabaseSystem參照完整性規(guī)則參照完整性:若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼Ks相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須為:或者取空值(F的每個屬性值均為空值)或者等于S中某個元組的主碼值。AnIntroductiontoDatabaseSystem參照完整性執(zhí)行例:職工-部門數據庫包含職工表EMP和部門表DEPT1)DEPT關系的主碼為部門號Deptno2)EMP關系的主碼為職工號Empno,外碼為部門號Deptno稱DEPT為被參照關系或目標關系,EMP為參照關系

RDBMS執(zhí)行參照完整性時需要考慮以下4方面:AnIntroductiontoDatabaseSystem

1。外碼是否可以接受空值的問題外碼是否能夠取空值:依賴于應用環(huán)境的語義實現參照完整性:系統(tǒng)提供定義外碼的機制定義外碼列是否允許空值的機制AnIntroductiontoDatabaseSystem1.外碼是否可以接受空值的問題(續(xù))例1:在職工-部門數據庫中,EMP關系包含有外碼Deptno某元組的這一列若為空值,表示這個職工尚未分配到任何具體的部門工作和應用環(huán)境的語義是相符AnIntroductiontoDatabaseSystem1。外碼是否可以接受空值的問題(續(xù))例2:學生-選課數據庫

Student關系為被參照關系,其主碼為Sno。SC為參照關系,外碼為Sno。若SC的Sno為空值:表明尚不存在的某個學生,或者某個不知學號的學生,選修了某門課程,其成績記錄在Grade中,與學校的應用環(huán)境是不相符的,因此SC的Sno列不能取空值。AnIntroductiontoDatabaseSystem2。在被參照關系中刪除元組時的問題出現違約操作的情形:

刪除被參照關系的某個元組(student)而參照關系有若干元組(SC)的外碼值與被刪除的被參照關系的主碼值相同AnIntroductiontoDatabaseSystem2。在被參照關系中刪除元組時的問題(續(xù))違約反應:可有三種策略受限刪除(NOACTION)級聯刪除(CASCADE)置空值刪除(NULLIFIES) 這三種處理方法,哪一種是正確的,要依應用環(huán)境的語義來定AnIntroductiontoDatabaseSystem2。在被參照關系中刪除元組時的問題(續(xù))受限刪除當參照關系中沒有任何元組的外碼值與要刪除的被參照關系的元組的主碼值相對應時,系統(tǒng)才執(zhí)行刪除操作,否則拒絕此刪除操作CREATETABLESC(SnoCHAR(5)foreignkeyreferencesStudent(Sno),CnoCHAR(1),GradeINT);AnIntroductiontoDatabaseSystem2。在被參照關系中刪除元組時的問題(續(xù))級聯刪除將參照關系中外碼值與被參照關系中要刪除元組主碼值相對應的元組一起刪除CREATETABLESC(SnoCHAR(5)foreignkeyreferencesStudent(Sno)ONDELETECASCADE,CnoCHAR(1),GradeINT);AnIntroductiontoDatabaseSystem2。在被參照關系中刪除元組時的問題(續(xù))置空值刪除刪除被參照關系的元組,并將參照關系中與被參照關系中被刪除元組主碼值相等的外碼值置為空值。AnIntroductiontoDatabaseSystem3。在參照關系中插入元組時的問題出現違約操作的情形需要在參照關系中插入元組,而被參照關系不存在相應的元組違約反應受限插入遞歸插入

AnIntroductiontoDatabaseSystem3。在參照關系中插入元組時的問題(續(xù))受限插入僅當被參照關系中存在相應的元組,其主碼值與參照關系插入元組的外碼值相同時,系統(tǒng)才執(zhí)行插入操作,否則拒絕此操作。遞歸插入首先向被參照關系中插入相應的元組,其主碼值等于參照關系插入元組的外碼值,然后向參照關系插入元組。AnIntroductiontoDatabaseSystem3。在參照關系中插入元組時的問題(續(xù))例:向SC關系插入(99001,1,90)元組,而Student關系中尚沒有Sno=99001的學生受限插入:系統(tǒng)將拒絕向SC關系插入(99001,1,90)元組遞歸插入:系統(tǒng)將首先向Student關系插入Sno=99001的元組,然后向SC關系插入(99001,1,90)元組。AnIntroductiontoDatabaseSystem結論:參照完整性的執(zhí)行RDBMS在執(zhí)行參照完整性時:需要向用戶提供定義主碼、外碼的機制向用戶提供按照自己的應用要求選擇處理依賴關系中對應的元組的方法AnIntroductiontoDatabaseSystem第五章數據庫完整性5.1實體完整性5.2參照完整性5.3用戶自定義完整性5.4觸發(fā)器AnIntroductiontoDatabaseSystem用戶定義的完整性1.用CREATETABLE語句在建表時定義用戶完整性約束可定義三類完整性約束列值非空(NOTNULL短語)列值唯一(UNIQUE短語)檢查列值是否滿足一個布爾表達式(CHECK短語)AnIntroductiontoDatabaseSystem用戶定義的完整性約束命名Constraint<約束名>[Primarykey…|ForeignKey…|Check

…]AnIntroductiontoDatabaseSystem用戶定義的完整性修改約束AlterTable<表名>

Add|DropConstraint<約束名>AnIntroductiontoDatabaseSystem第五章數據庫完整性5.1實體完整性5.2參照完整性5.3用戶自定義完整性5.4觸發(fā)器AnIntroductiontoDatabaseSystem觸發(fā)器通過觸發(fā)器來定義復雜的完整性規(guī)則定義其它的完整性約束時,需要用數據庫觸發(fā)器(Trigger)來實現。數據庫觸發(fā)器:一類靠事務驅動的特殊過程一旦由某個用戶定義,任何用戶對該數據的增、刪、改操作均由服務器自動激活相應的觸發(fā)子,在核心層進行集中的完整性控制定義數據庫觸發(fā)器的語句

AnIntroductiontoDatabaseSystem觸發(fā)器CREATETRIGGER<觸發(fā)器名>ON<表名>FOR{INSERT|DELETE|UPDATE}AS<觸發(fā)動作體>刪除DROPTRIGGER<觸發(fā)器名>AnIntroductiontoDatabaseSystem觸發(fā)器例.計算機系學生成績不低于60分,低于60分自動賦為60分CreateTriggerchggradeonSCforinsertasupdateSCsetgrade=60whereexists(select*frominsertedwhereinserted.Sno=SC.Snoandinserted.Cno=SC.Cnoandinserted.grade<60)AnIntroductiontoDatabas

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論