數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性_第1頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性_第2頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性_第3頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性_第4頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

中國(guó)地質(zhì)大學(xué)信息工程學(xué)院數(shù)據(jù)庫(kù)系統(tǒng)概論AnIntroductiontoDatabaseSystem第五章數(shù)據(jù)庫(kù)完整性10/1/1數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第1頁(yè)什么是數(shù)據(jù)庫(kù)完整性數(shù)據(jù)正確性和相容性預(yù)防不合語(yǔ)義數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。關(guān)注是否真實(shí)地反應(yīng)現(xiàn)實(shí)世界例:學(xué)生年紀(jì)必須是整數(shù),取值范圍為14--29;學(xué)生性別只能是男或女;學(xué)生學(xué)號(hào)一定是唯一;學(xué)生所在系必須是學(xué)校開設(shè)系;提要5.1實(shí)體完整性5.2參考完整性5.3用戶定義完整性5.4完整性約束命名子句5.5觸發(fā)器10/1/2數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第2頁(yè)數(shù)據(jù)庫(kù)完整性與安全性

區(qū)分和聯(lián)絡(luò)兩個(gè)不一樣概念,但有一定聯(lián)絡(luò);前者是為了預(yù)防數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義數(shù)據(jù),預(yù)防錯(cuò)誤信息輸入和輸出,既所謂垃圾進(jìn)垃圾出(GarbageinGarbageout)所造成無(wú)效操作和錯(cuò)誤結(jié)果;后者是保護(hù)數(shù)據(jù)庫(kù)預(yù)防惡意破壞和非法存取;安全性辦法防范對(duì)象是非法用戶,完整性辦法防范對(duì)象是不合語(yǔ)義數(shù)據(jù).完整性控制機(jī)制1.完整性約束條件定義機(jī)制2.完整性檢驗(yàn)機(jī)制3.違約處理10/1/3數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第3頁(yè)完整性約束條件定義完整性約束條件:數(shù)據(jù)模型組成部分約束數(shù)據(jù)庫(kù)中數(shù)據(jù)語(yǔ)義DBMS應(yīng)提供定義數(shù)據(jù)庫(kù)完整性約束條件,并把它們作為模式一部分存入數(shù)據(jù)庫(kù)中10/1/4數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第4頁(yè)完整性檢驗(yàn)機(jī)制檢驗(yàn)用戶發(fā)出操作請(qǐng)求是否違反了完整性約束條件

10/1/5數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第5頁(yè)違約處理假如發(fā)覺用戶操作請(qǐng)求使數(shù)據(jù)違反了完整性約束條件,則采取一定動(dòng)作來(lái)確保數(shù)據(jù)完整性。10/1/6數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第6頁(yè)完整性約束條件完整性約束條件作用對(duì)象列:對(duì)屬性取值類型、范圍、精度等約束條件元組:對(duì)元組中各個(gè)屬性列間聯(lián)絡(luò)約束關(guān)系:對(duì)若干元組間、關(guān)系集合上以及關(guān)系之間聯(lián)絡(luò)約束10/1/7數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第7頁(yè)完整性約束條件(續(xù))靜態(tài)對(duì)靜態(tài)對(duì)象約束是反應(yīng)數(shù)據(jù)庫(kù)狀態(tài)合理性約束動(dòng)態(tài)對(duì)動(dòng)態(tài)對(duì)象約束是反應(yīng)數(shù)據(jù)庫(kù)狀態(tài)變遷約束10/1/8數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第8頁(yè)完整性約束條件分類六類完整性約束條件靜態(tài)列級(jí)約束靜態(tài)元組約束靜態(tài)關(guān)系約束動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)元組約束動(dòng)態(tài)關(guān)系約束10/1/9數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第9頁(yè)完整性約束條件(續(xù))1.靜態(tài)列級(jí)約束靜態(tài)列級(jí)約束:正確取值域說明最常見、最簡(jiǎn)單、最輕易實(shí)現(xiàn)一類完整性約束10/1/10數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第10頁(yè)完整性約束條件(續(xù))五類靜態(tài)列級(jí)約束1)數(shù)據(jù)類型約束:數(shù)據(jù)類型、長(zhǎng)度、單位、精度等例:學(xué)生姓名數(shù)據(jù)類型為字符型,長(zhǎng)度為82)對(duì)數(shù)據(jù)格式約束 例:學(xué)號(hào):前兩位表示入年份,后四位為次序編號(hào)日期:YY.MM.DD。10/1/11數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第11頁(yè)補(bǔ)充:完整性約束條件(續(xù))3)取值范圍或取值集合約束 例:要求成績(jī)?nèi)≈捣秶鸀?-100年紀(jì)取值范圍為14-29性別取值集合為[男,女]4)對(duì)空值約束 空值:未定義或未知值空值:與零值和空格不一樣有列允許空值,有則不允許,如成績(jī)可為空值5)其它約束 例:關(guān)于列排序說明,組合列等10/1/12數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第12頁(yè)補(bǔ)充:完整性約束條件(續(xù))2.靜態(tài)元組約束要求元組各個(gè)列之間約束關(guān)系例:訂貨關(guān)系中發(fā)貨量<=訂貨量教師關(guān)系中教授工資>=700元

靜態(tài)元組約束只局限在元組上10/1/13數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第13頁(yè)補(bǔ)充:完整性約束條件(續(xù))3.靜態(tài)關(guān)系約束關(guān)系各個(gè)元組之間或若干關(guān)系之間存在各種聯(lián)絡(luò)或約束常見靜態(tài)關(guān)系約束:1)實(shí)體完整性約束2)參考完整性約束3)函數(shù)依賴約束4)統(tǒng)計(jì)約束10/1/14數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第14頁(yè)統(tǒng)計(jì)約束定義某個(gè)字段值一個(gè)關(guān)系多個(gè)元組統(tǒng)計(jì)值之間約束關(guān)系例:職員平均工資2倍<=部門經(jīng)理工資<=職員平均工資5倍

10/1/15數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第15頁(yè)完整性約束條件(續(xù))4.動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)列級(jí)約束是修改列定義或列值時(shí)應(yīng)滿足約束條件10/1/16數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第16頁(yè)完整性約束條件(續(xù)) 1)修改列定義時(shí)約束 例:將原來(lái)允許空值列改為不允許空值時(shí):該列當(dāng)前已存在空值,則拒絕這種修改2)修改列值時(shí)約束修改列值時(shí)新舊值之間要滿足約束條件例:職員工資調(diào)整>=原來(lái)工資年紀(jì)只能增加10/1/17數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第17頁(yè)完整性約束條件(續(xù))5.動(dòng)態(tài)元組約束修改元組值:各個(gè)字段之間要滿足約束條件例:職員工資調(diào)整不得低于其原來(lái)工資+工齡*1.510/1/18數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第18頁(yè)完整性約束條件(續(xù))6.動(dòng)態(tài)關(guān)系約束關(guān)系改變前后狀態(tài):限制條件例:事務(wù)一致性、原子性等約束條件10/1/19數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第19頁(yè)5.1實(shí)體完整性5.1.1實(shí)體完整性定義5.1.2實(shí)體完整性檢驗(yàn)和違約處理10/1/20數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第20頁(yè)5.1.1實(shí)體完整性定義實(shí)體完整性(EntityIntegrity)若屬性A是基本關(guān)系R主屬性,則屬性A不能取空值例SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)POSTGRADUATE屬性為主碼(假設(shè)碩士不會(huì)重名),則其不能取空值10/1/21數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第21頁(yè)5.1.1實(shí)體完整性定義關(guān)系模型必須恪守實(shí)體完整性規(guī)則原因?qū)嶓w完整性規(guī)則是針對(duì)基本關(guān)系而言。一個(gè)基本表通常對(duì)應(yīng)現(xiàn)實(shí)世界一個(gè)實(shí)體集或多對(duì)多聯(lián)絡(luò)。(2)現(xiàn)實(shí)世界中實(shí)體和實(shí)體間聯(lián)絡(luò)都是可區(qū)分,即它們含有某種唯一性標(biāo)識(shí)。(3)關(guān)系模型中以主碼作為唯一性標(biāo)識(shí)。(4)主碼中屬性即主屬性不能取空值。空值就是“不知道”或“無(wú)意義”值。主屬性取空值,就說明存在某個(gè)不可標(biāo)識(shí)實(shí)體,即存在不可區(qū)分實(shí)體,這與第(2)點(diǎn)相矛盾,所以這個(gè)規(guī)則稱為實(shí)體完整性。10/1/22數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第22頁(yè)5.1.1實(shí)體完整性定義關(guān)系模型實(shí)體完整性在Createtable中用PrimaryKey定義。對(duì)單屬性組成碼有兩種說明方法:定義為列級(jí)約束條件表級(jí)約束條件對(duì)多個(gè)屬性組成碼只有一個(gè)說明方法,即定義為表級(jí)約束條件10/1/23數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第23頁(yè)[例題1]將Student表中Sno屬性定義為碼。Createtablestudent(Snochar(9)primarykey,/*在列級(jí)定義主碼*/Snamechar(20)notnull,Ssexchar(2),Sagesmallint,Sdeptchar(20));5.1.1實(shí)體完整性定義10/1/24數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第24頁(yè)5.1.1實(shí)體完整性定義或者Createtablestudent(snochar(9),Snamechar(20)notnull,Ssexchar(2),Sagesmallint,Sdeptchar(20),primarykey(sno),/*在表級(jí)定義主碼*/);10/1/25數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第25頁(yè)5.1.1實(shí)體完整性定義[例題2]將SC表中Sno,Cno屬性組定義為碼CreatetableSC(Snochar(9)notnull,Cnochar(4)notnull,gradesmallint,Primarykey(Sno,Cno),/*只能在表級(jí)定義主碼*/);10/1/26數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第26頁(yè)5.1.2實(shí)體完整性檢驗(yàn)和違約處理用primarykey短語(yǔ)定義了關(guān)系主碼后,每當(dāng)應(yīng)用程序?qū)颈聿迦胍粭l統(tǒng)計(jì)或者對(duì)主碼列進(jìn)行更新操作時(shí),RDBMS將自動(dòng)檢驗(yàn):檢驗(yàn)主碼值是否唯一,假如不唯一則拒絕插入或修改。檢驗(yàn)主碼地各個(gè)屬性是否為空,只要一個(gè)為空就拒絕插入或修改10/1/27數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第27頁(yè)5.1.2實(shí)體完整性檢驗(yàn)和違約處理檢驗(yàn)主碼值是否唯一方法(2種):全表掃描keyif2if3if4if5ikey1f21f31f41f51key2f22f32f42f52key3f23f33f43f53..10/1/28數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第28頁(yè)5.1.2實(shí)體完整性檢驗(yàn)和違約處理全表掃描缺點(diǎn):耗時(shí)10/1/29數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第29頁(yè)5.1.2實(shí)體完整性檢驗(yàn)和違約處理第二種方法:建索引(如B+樹索引)25511230667815202537304168697176798493515465新插入統(tǒng)計(jì)主碼值10/1/30數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第30頁(yè)5.1.2實(shí)體完整性檢驗(yàn)和違約處理RDBMS關(guān)鍵普通都在主碼上自動(dòng)建立一個(gè)索引經(jīng)過索引查找基本表中是否存在新主碼值——提升效率10/1/31數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第31頁(yè)5.2參考完整性5.2.1參考完整性定義5.2.2參考完整性檢驗(yàn)和違約處10/1/32數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第32頁(yè)5.2.1參考完整性定義關(guān)系模型參考完整性在Createtable中用foreignkey短語(yǔ)定義哪些列為外碼。10/1/33數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第33頁(yè)5.2.1參考完整性定義[例題3]定義SC中參考完整性。Createtablesc(snochar(9)notnull,cnochar(4)notnull,gradesmallint,Primarykey(sno,cno),/*在表級(jí)定義實(shí)體完整性*/foreignkey(sno)referencesstudent(sno),/*在表級(jí)定義參考完整性*/foreignkey(Cno)referencesstudent(Cno),/*在表級(jí)定義參考完整性*/);10/1/34數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第34頁(yè)5.2.2參考完整性檢驗(yàn)和違約處理參考完整性將兩個(gè)表中對(duì)應(yīng)元組聯(lián)絡(luò)起來(lái)后。當(dāng)進(jìn)行增刪操作時(shí)有可能破壞參考完整性,必須進(jìn)行檢驗(yàn)。10/1/35數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第35頁(yè)5.2.2參考完整性檢驗(yàn)和違約處理對(duì)SC和Students有4種可能破壞參考完整性情況:SC表中增加一個(gè)元組,該元組Sno屬性值在Students中找不到一個(gè)元組,其Sno屬性值與之相等。修改SC表中一個(gè)元組,修改后該元組Sno屬性在Students中找不到一個(gè)元組,其Sno屬性值與之相等。從Students表中刪除一個(gè)元組,造成SC表中一些元組Sno屬性值在Students中找不到一個(gè)元組,其Sno屬性值與之相等。修改Students表中一個(gè)元組Sno屬性,造成SC表中一些元組Sno屬性值在Students中找不到一個(gè)元組,其Sno屬性值與之相等10/1/36數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第36頁(yè)表5.1可能破壞參考完整性情況及違約處理被參考表(Students)參考表(比如SC)違約處理可能破壞參考完整性插入元組拒絕可能破壞參考完整性修改外碼值拒絕刪除元組可能破壞參考完整性拒絕/級(jí)聯(lián)刪除/設(shè)置為空修改主碼值可能破壞參考完整性拒絕/級(jí)聯(lián)修改除/設(shè)置為空10/1/37數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第37頁(yè)處理策略1、拒絕(Noaction)執(zhí)行不允許該操作執(zhí)行。該策略普通為默認(rèn)策略。2、級(jí)聯(lián)(Cascade)操作當(dāng)刪除或修改被參考表(Students)一個(gè)元組造成了與參考表(SC)不一致,則刪除或修改參考表中全部造成不一致元組。比如,刪除Students表中元組,Sno值為15121則要從SC表中級(jí)聯(lián)刪除SC.Sno=‘15121’全部元組。3、設(shè)置空值(Set-Null) 比如:學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào),年紀(jì))專業(yè)(專業(yè)號(hào),專業(yè)名)專業(yè)號(hào)能夠取空值但在學(xué)生-選課數(shù)據(jù)庫(kù)中,Students關(guān)系為被參考關(guān)系,其主碼為Sno,SC為參考關(guān)系,Sno為外碼。若SCSno為空值,則表明。。。。10/1/38數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第38頁(yè)處理策略若違反了參考完整性,系統(tǒng)選取默認(rèn)策略,即拒絕執(zhí)行。假如想讓系統(tǒng)采取其它策略則必須在創(chuàng)建表時(shí)候顯式地加以說明。10/1/39數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第39頁(yè)[例題4]顯式說明參考完整性違約處理CreatetableSC(snochar(9)notnull,cnochar(4)notnull,gradesmallint,Primarykey(sno,cno),/*在表級(jí)定義實(shí)體完整性*/foreignkey(sno)referencesstudent(sno),/*在表級(jí)定義參考完整性*/

ondeletecascade/*當(dāng)刪除student表中元組時(shí),級(jí)聯(lián)刪除SC表中對(duì)應(yīng)元組*/onupdatecascade,/*當(dāng)更新student表中Sno時(shí),級(jí)聯(lián)更新SC表中對(duì)應(yīng)元組*/foreignkey(sno)referencescourses(sno),,/*在表級(jí)定義參考完整性*/

ondeletenoAction/*當(dāng)刪除courses表中元組時(shí)造成了與SC表不一致拒絕刪除*/onupdatecascade

);10/1/40數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第40頁(yè)5.3用戶定義完整性5.3.1屬性上約束條件定義5.3.2屬性上約束條件檢驗(yàn)和違約處理5.3.3元組上約束條件定義5.3.4元組上約束條件檢驗(yàn)和違約處理10/1/41數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第41頁(yè)5.3.1屬性上約束條件定義屬性值限制,包含:列值非空(Notnull短語(yǔ))列值唯一(unique短語(yǔ))檢驗(yàn)列值是否滿足一個(gè)布爾表示式(Check短語(yǔ))10/1/42數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第42頁(yè)5.3.1屬性上約束條件定義1、不允許取空值[例題5]在定義SC表時(shí),說明Sno,Cno,Grade屬性不允許取空值。CreatetableSC(Snochar(9)notnull,Cnochar(40)notnull,Gradesmallintnotnull,Primarykey(Sno,Cno),)10/1/43數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第43頁(yè)5.3.1屬性上約束條件定義2、列值唯一[例題6]建立部門表Dept,要求部門名稱Dname列取值唯一,部門編號(hào)Deptno列為主碼。Createtabledept(Deptnonumeric(2),Dnamechar(9)nuique,Locationchar(10),Primarykey(Deptno));10/1/44數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第44頁(yè)5.3.1屬性上約束條件定義3、用Check短語(yǔ)指定列值應(yīng)該滿足條件[例題7]Student表Ssex只允許取“男”或“女”。CreatetableStudents(Snochar(9)primarykey,Snomechar(8)notnull,Ssexchar(2)check(SsexIN(‘男’,’女’)),Sagesmallint,SdeptChar(20))10/1/45數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第45頁(yè)5.3.1屬性上約束條件定義[例題8]SC表Grade值應(yīng)該在0和100之間。CreatetableSC(Snochar(9)notnull,Cnochar(4)notnull,GradesmallintCheck(Grade>=0andGrade<=100),primarykey(Sno,Cno),Foreignkey(Sno)referencesStudent(Sno),Foreignkey(Cno)referencesCourse(Cno));10/1/46數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第46頁(yè)5.3用戶定義完整性5.3.1屬性上約束條件定義5.3.2屬性上約束條件檢驗(yàn)和違約處理5.3.3元組上約束條件定義5.3.4元組上約束條件檢驗(yàn)和違約處理10/1/47數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第47頁(yè)5.3.2屬性上約束條件檢驗(yàn)和違約處理當(dāng)往表中插入元組或修改屬性值時(shí),RDBMS就檢驗(yàn)屬性上約束條件是否被滿足,不然拒絕執(zhí)行。10/1/48數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第48頁(yè)5.3用戶定義完整性5.3.1屬性上約束條件定義5.3.2屬性上約束條件檢驗(yàn)和違約處5.3.3元組上約束條件定義5.3.4元組上約束條件檢驗(yàn)和違約處10/1/49數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第49頁(yè)5.3.3元組上約束條件定義與屬性上約束條件定義類似,在Create語(yǔ)句中能夠用Check短語(yǔ)定義元組上約束條件,即元組級(jí)限制。 [例題9]當(dāng)學(xué)生性別是男時(shí),其名字不能以Ms.打頭。 CreatetableStudent (Snochar(9),Snamechar(8)notnull,Ssexchar(2),Sagesmallint,Sdeptchar(20),Primarykey(Sno),check(Sex=‘女’orSnamenotlike‘Ms.%’));10/1/50數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第50頁(yè)5.3用戶定義完整性5.3.1屬性上約束條件定義5.3.2屬性上約束條件檢驗(yàn)和違約處5.3.3元組上約束條件定義5.3.4元組上約束條件檢驗(yàn)和違約處10/1/51數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第51頁(yè)5.3.4元組上約束條件檢驗(yàn)和違約處理當(dāng)往表中插入元組或修改屬性值時(shí),RDBMS就檢驗(yàn)元組上約束條件是否被滿足,不然拒絕執(zhí)行。10/1/52數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第52頁(yè)5.4完整性約束命名子句1、完整性約束命令子句語(yǔ)法:Constraint<完整性約束條件>[primarykey短語(yǔ)|foreignkey短語(yǔ)|check短語(yǔ)]10/1/53數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第53頁(yè)5.4完整性約束命名子句[例題10]建立學(xué)生記錄表Students,要求學(xué)號(hào)在90000~99999之間,姓名不能取空值,年紀(jì)小于30,性別只能是“男”或“女”。CreatetableStudents(Snonumeric(6)constraintC1check(Snobetween90000and99999),Snamechar(20)constraintC2notnull,Sagenumeric(3)constraintC3check(Sage<30),Ssexchar(2)constraintC4check(SsexIn(‘男’,‘女’)),constraintStudentKeyprimarykey(Sno));10/1/54數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第54頁(yè)5.4完整性約束命名子句[例題11]建立教師表teacher,要求每個(gè)老師應(yīng)發(fā)工資不低于3000元。(應(yīng)發(fā)工資實(shí)際上就是實(shí)發(fā)工資列Sal與扣除項(xiàng)Deduct之和)Createtableteacher(Enonumeric(4)primarykey,Enamechar(10),Jobchar(8),Salnumeric(7,2),Deductnumeric(2),Contraintempkeyforeignkey(Deptno)referencesdept(deptno),ContrantC1check(Sal+Deduct>=3000));10/1/55數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第55頁(yè)5.4完整性約束命名子句2.修改表中完整性限制使用Altertable語(yǔ)句[例題12]去掉[例題10]Students表中對(duì)性別限制。AltertablestudentDropconstraintC410/1/56數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第56頁(yè)5.4完整性約束命名子句[例題13]修改表Students表中約束條件,要求學(xué)號(hào)改為800000~999999之間,年紀(jì)小于30改為45。先刪除原來(lái)約束條件,再增加新約束條件。AltertablestudentsDropconstraintC1;AltertablestudentsAddconstraintC1check(Snobetween800000and999999),AltertablestudentsDropconstraintC3;AltertablestudentsAddconstraintC3check(Sage<45);10/1/57數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第57頁(yè)5.5觸發(fā)器5.5.1定義觸發(fā)器5.5.2激活觸發(fā)器5.5.3刪除觸發(fā)器10/1/58數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第58頁(yè)5.5.1定義觸發(fā)器1、觸發(fā)器(Trigger):定義在關(guān)系表上一類由事件驅(qū)動(dòng)特殊過程。2、格式Createtrigger<觸發(fā)器名>{Before|After}<觸發(fā)事件>on<表名>Foreach{Row|Statement}[When<觸發(fā)條件>]<觸發(fā)動(dòng)作體>10/1/59數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第59頁(yè)

5.5.1定義觸發(fā)器舉例[例題18]定義一個(gè)Before行級(jí)觸發(fā)器,為教師表Teacher定義完整性規(guī)則“教授工資不得低于4000元,假如低于4000元,自動(dòng)改為4000元”。CreatetriggerInser_or_SalBeforeinsertorupdateonteacherForeachrowAsbeginIf(new.pJob=‘教授’)and(new.Sal<4000)Thennew.sal:=4000;EndIf;End;10/1/60數(shù)據(jù)庫(kù)系統(tǒng)概論之?dāng)?shù)據(jù)庫(kù)完整性第60頁(yè)

5.5.1定義觸發(fā)器[例題19]定義一個(gè)After行級(jí)觸發(fā)器,當(dāng)教師表Teacher工資發(fā)生改變后就自動(dòng)在工資改變表Sal_log中增加一條對(duì)應(yīng)紀(jì)錄。CreatetableSal_log(Enonumric(4)ref

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論