版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ù)完整性12/9/20221中國(guó)地質(zhì)大學(xué)信息工程學(xué)院數(shù)據(jù)庫(kù)系統(tǒng)概論12/7/20221什么是數(shù)據(jù)庫(kù)的完整性數(shù)據(jù)的正確性和相容性防止不合語(yǔ)義的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。關(guān)注是否真實(shí)地反映現(xiàn)實(shí)世界例:學(xué)生的年齡必須是整數(shù),取值范圍為14--29;學(xué)生的性別只能是男或女;學(xué)生的學(xué)號(hào)一定是唯一的;學(xué)生所在的系必須是學(xué)校開(kāi)設(shè)的系;提綱5.1實(shí)體完整性5.2參照完整性5.3用戶定義完整性5.4完整性約束命名子句5.5觸發(fā)器12/9/20222什么是數(shù)據(jù)庫(kù)的完整性12/7/20222數(shù)據(jù)庫(kù)的完整性與安全性
區(qū)別和聯(lián)系兩個(gè)不同的概念,但有一定的聯(lián)系;前者是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出,既所謂的垃圾進(jìn)垃圾出(GarbageinGarbageout)所造成的無(wú)效操作和錯(cuò)誤結(jié)果;后者是保護(hù)數(shù)據(jù)庫(kù)防止惡意的破壞和非法存取;安全性措施防范的對(duì)象是非法用戶,完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù).完整性控制機(jī)制1.完整性約束條件定義機(jī)制2.完整性檢查機(jī)制3.違約處理12/9/20223數(shù)據(jù)庫(kù)的完整性與安全性
區(qū)別和聯(lián)系兩個(gè)不同的概念,但有一定的完整性約束條件定義完整性約束條件:數(shù)據(jù)模型的組成部分約束數(shù)據(jù)庫(kù)中數(shù)據(jù)的語(yǔ)義DBMS應(yīng)提供定義數(shù)據(jù)庫(kù)完整性約束條件,并把它們作為模式的一部分存入數(shù)據(jù)庫(kù)中12/9/20224完整性約束條件定義完整性約束條件:數(shù)據(jù)模型的組成部分約束數(shù)據(jù)完整性檢查機(jī)制檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件
12/9/20225完整性檢查機(jī)制檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件違約處理如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。12/9/20226違約處理如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則完整性約束條件完整性約束條件作用的對(duì)象列:對(duì)屬性的取值類型、范圍、精度等的約束條件元組:對(duì)元組中各個(gè)屬性列間的聯(lián)系的約束關(guān)系:對(duì)若干元組間、關(guān)系集合上以及關(guān)系之間的聯(lián)系的約束12/9/20227完整性約束條件完整性約束條件作用的對(duì)象12/7/20227完整性約束條件(續(xù))靜態(tài)對(duì)靜態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束動(dòng)態(tài)對(duì)動(dòng)態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束12/9/20228完整性約束條件(續(xù))靜態(tài)12/7/20228完整性約束條件分類六類完整性約束條件靜態(tài)列級(jí)約束靜態(tài)元組約束靜態(tài)關(guān)系約束動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)元組約束動(dòng)態(tài)關(guān)系約束12/9/20229完整性約束條件分類六類完整性約束條件12/7/20229完整性約束條件(續(xù))1.靜態(tài)列級(jí)約束靜態(tài)列級(jí)約束:對(duì)的取值域的說(shuō)明最常見(jiàn)、最簡(jiǎn)單、最容易實(shí)現(xiàn)的一類完整性約束12/9/202210完整性約束條件(續(xù))1.靜態(tài)列級(jí)約束12/7/202210完整性約束條件(續(xù))五類靜態(tài)列級(jí)約束1)數(shù)據(jù)類型約束:數(shù)據(jù)的類型、長(zhǎng)度、單位、精度等例:學(xué)生姓名的數(shù)據(jù)類型為字符型,長(zhǎng)度為82)對(duì)數(shù)據(jù)格式的約束 例:學(xué)號(hào):前兩位表示入學(xué)年份,后四位為順序編號(hào)日期:YY.MM.DD。12/9/202211完整性約束條件(續(xù))五類靜態(tài)列級(jí)約束12/7/202211補(bǔ)充:完整性約束條件(續(xù))3)取值范圍或取值集合的約束 例:規(guī)定成績(jī)的取值范圍為0-100年齡的取值范圍為14-29性別的取值集合為[男,女]4)對(duì)空值的約束 空值:未定義或未知的值空值:與零值和空格不同有的列允許空值,有的則不允許,如成績(jī)可為空值5)其他約束 例:關(guān)于列的排序說(shuō)明,組合列等12/9/202212補(bǔ)充:完整性約束條件(續(xù))3)取值范圍或取值集合的約束12補(bǔ)充:完整性約束條件(續(xù))2.靜態(tài)元組約束規(guī)定元組的各個(gè)列之間的約束關(guān)系例:訂貨關(guān)系中發(fā)貨量<=訂貨量教師關(guān)系中教授的工資>=700元
靜態(tài)元組約束只局限在元組上12/9/202213補(bǔ)充:完整性約束條件(續(xù))2.靜態(tài)元組約束12/7/202補(bǔ)充:完整性約束條件(續(xù))3.靜態(tài)關(guān)系約束關(guān)系的各個(gè)元組之間或若干關(guān)系之間存在的各種聯(lián)系或約束常見(jiàn)靜態(tài)關(guān)系約束:1)實(shí)體完整性約束2)參照完整性約束3)函數(shù)依賴約束4)統(tǒng)計(jì)約束12/9/202214補(bǔ)充:完整性約束條件(續(xù))3.靜態(tài)關(guān)系約束12/7/202統(tǒng)計(jì)約束定義某個(gè)字段值一個(gè)關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系例:職工平均工資的2倍<=部門經(jīng)理的工資<=職工平均工資的5倍
12/9/202215統(tǒng)計(jì)約束定義某個(gè)字段值一個(gè)關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系完整性約束條件(續(xù))4.動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)列級(jí)約束是修改列定義或列值時(shí)應(yīng)滿足的約束條件12/9/202216完整性約束條件(續(xù))4.動(dòng)態(tài)列級(jí)約束12/7/202216完整性約束條件(續(xù)) 1)修改列定義時(shí)的約束 例:將原來(lái)允許空值的列改為不允許空值時(shí):該列目前已存在空值,則拒絕這種修改2)修改列值時(shí)的約束修改列值時(shí)新舊值之間要滿足的約束條件例:職工工資調(diào)整>=原來(lái)工資年齡只能增長(zhǎng)12/9/202217完整性約束條件(續(xù)) 1)修改列定義時(shí)的約束12/7/20完整性約束條件(續(xù))5.動(dòng)態(tài)元組約束修改元組值:各個(gè)字段之間要滿足的約束條件例:職工工資調(diào)整不得低于其原來(lái)工資+工齡*1.512/9/202218完整性約束條件(續(xù))5.動(dòng)態(tài)元組約束12/7/202218完整性約束條件(續(xù))6.動(dòng)態(tài)關(guān)系約束關(guān)系變化前后狀態(tài):限制條件例:事務(wù)一致性、原子性等約束條件12/9/202219完整性約束條件(續(xù))6.動(dòng)態(tài)關(guān)系約束12/7/2022195.1實(shí)體完整性5.1.1實(shí)體完整性定義5.1.2實(shí)體完整性檢查和違約處理12/9/2022205.1實(shí)體完整性12/7/2022205.1.1實(shí)體完整性定義實(shí)體完整性(EntityIntegrity)若屬性A是基本關(guān)系R的主屬性,則屬性A不能取空值例SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)POSTGRADUATE屬性為主碼(假設(shè)研究生不會(huì)重名),則其不能取空值12/9/2022215.1.1實(shí)體完整性定義實(shí)體完整性(EntityInte5.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)系。(2)現(xiàn)實(shí)世界中的實(shí)體和實(shí)體間的聯(lián)系都是可區(qū)分的,即它們具有某種唯一性標(biāo)識(shí)。(3)關(guān)系模型中以主碼作為唯一性標(biāo)識(shí)。(4)主碼中的屬性即主屬性不能取空值??罩稻褪恰安恢馈被颉盁o(wú)意義”的值。主屬性取空值,就說(shuō)明存在某個(gè)不可標(biāo)識(shí)的實(shí)體,即存在不可區(qū)分的實(shí)體,這與第(2)點(diǎn)相矛盾,因此這個(gè)規(guī)則稱為實(shí)體完整性。12/9/2022225.1.1實(shí)體完整性定義關(guān)系模型必須遵守實(shí)體完整性規(guī)則的原5.1.1實(shí)體完整性定義關(guān)系模型的實(shí)體完整性在Createtable中用PrimaryKey定義。對(duì)單屬性的構(gòu)成的碼有兩種說(shuō)明方法:定義為列級(jí)約束條件表級(jí)約束條件對(duì)多個(gè)屬性構(gòu)成的碼只有一種說(shuō)明方法,即定義為表級(jí)約束條件12/9/2022235.1.1實(shí)體完整性定義關(guān)系模型的實(shí)體完整性在Create[例題1]將Student表中的Sno屬性定義為碼。Createtablestudent(Snochar(9)primarykey,/*在列級(jí)定義主碼*/Snamechar(20)notnull,Ssexchar(2),Sagesmallint,Sdeptchar(20));5.1.1實(shí)體完整性定義12/9/202224[例題1]將Student表中的Sno屬性定義為碼。5.1.5.1.1實(shí)體完整性定義或者Createtablestudent(snochar(9),Snamechar(20)notnull,Ssexchar(2),Sagesmallint,Sdeptchar(20),primarykey(sno),/*在表級(jí)定義主碼*/);12/9/2022255.1.1實(shí)體完整性定義或者12/7/2022255.1.1實(shí)體完整性定義[例題2]將SC表中的Sno,Cno屬性組定義為碼CreatetableSC(Snochar(9)notnull,Cnochar(4)notnull,gradesmallint,Primarykey(Sno,Cno),/*只能在表級(jí)定義主碼*/);12/9/2022265.1.1實(shí)體完整性定義[例題2]將SC表中的Sno,C5.1.2實(shí)體完整性檢查和違約處理用primarykey短語(yǔ)定義了關(guān)系的主碼后,每當(dāng)應(yīng)用程序?qū)颈聿迦胍粭l記錄或者對(duì)主碼列進(jìn)行更新操作時(shí),RDBMS將自動(dòng)檢查:檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。檢查主碼地各個(gè)屬性是否為空,只要一個(gè)為空就拒絕插入或修改12/9/2022275.1.2實(shí)體完整性檢查和違約處理用primarykey5.1.2實(shí)體完整性檢查和違約處理檢查主碼值是否唯一的方法(2種):全表掃描keyif2if3if4if5ikey1f21f31f41f51key2f22f32f42f52key3f23f33f43f53..12/9/2022285.1.2實(shí)體完整性檢查和違約處理檢查主碼值是否唯一的方法5.1.2實(shí)體完整性檢查和違約處理全表掃描缺點(diǎn):耗時(shí)12/9/2022295.1.2實(shí)體完整性檢查和違約處理全表掃描缺點(diǎn):12/7/5.1.2實(shí)體完整性檢查和違約處理第二種方法:建索引(如B+樹(shù)索引)25511230667815202537304168697176798493515465新插入記錄的主碼值12/9/2022305.1.2實(shí)體完整性檢查和違約處理第二種方法:建索引(如B5.1.2實(shí)體完整性檢查和違約處理RDBMS核心一般都在主碼上自動(dòng)建立一個(gè)索引通過(guò)索引查找基本表中是否存在新的主碼值——提高效率12/9/2022315.1.2實(shí)體完整性檢查和違約處理RDBMS核心一般都在主5.2參照完整性5.2.1參照完整性定義5.2.2參照完整性檢查和違約處12/9/2022325.2參照完整性5.2.1參照完整性定義12/7/25.2.1參照完整性定義關(guān)系模型的參照完整性在Createtable中用foreignkey短語(yǔ)定義哪些列為外碼。12/9/2022335.2.1參照完整性定義關(guān)系模型的參照完整性在Creat5.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í)定義參照完整性*/);12/9/2022345.2.1參照完整性定義[例題3]定義SC中的參考完5.2.2參照完整性檢查和違約處理參照完整性將兩個(gè)表中的相應(yīng)元組聯(lián)系起來(lái)后。當(dāng)進(jìn)行增刪操作時(shí)有可能破壞參照完整性,必須進(jìn)行檢查。12/9/2022355.2.2參照完整性檢查和違約處理參照完整性將兩個(gè)表中的5.2.2參照完整性檢查和違約處理對(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屬性值與之相等12/9/2022365.2.2參照完整性檢查和違約處理對(duì)SC和Student表5.1可能破壞參照完整性的情況及違約處理被參照表(Students)參照表(例如SC)違約處理可能破壞參照完整性插入元組拒絕可能破壞參照完整性修改外碼值拒絕刪除元組可能破壞參照完整性拒絕/級(jí)聯(lián)刪除/設(shè)置為空修改主碼值可能破壞參照完整性拒絕/級(jí)聯(lián)修改除/設(shè)置為空12/9/202237表5.1可能破壞參照完整性的情況及違約處理被參照表(Stu處理策略1、拒絕(Noaction)執(zhí)行不允許該操作執(zhí)行。該策略一般為默認(rèn)策略。2、級(jí)聯(lián)(Cascade)操作當(dāng)刪除或修改被參照表(Students)的一個(gè)元組造成了與參照表(SC)的不一致,則刪除或修改參照表中的所有造成不一致的元組。例如,刪除Students表中的元組,Sno值為200215121則要從SC表中級(jí)聯(lián)刪除SC.Sno=‘200215121’的所有元組。3、設(shè)置空值(Set-Null) 例如:學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào),年齡)專業(yè)(專業(yè)號(hào),專業(yè)名)專業(yè)號(hào)可以取空值但在學(xué)生-選課數(shù)據(jù)庫(kù)中,Students關(guān)系為被參照關(guān)系,其主碼為Sno,SC為參考關(guān)系,Sno為外碼。若SC的Sno為空值,則表明。。。。12/9/202238處理策略1、拒絕(Noaction)執(zhí)行12/7/2022處理策略若違反了參照完整性,系統(tǒng)選用默認(rèn)策略,即拒絕執(zhí)行。如果想讓系統(tǒng)采用其他策略則必須在創(chuàng)建表的時(shí)候顯式地加以說(shuō)明。12/9/202239處理策略若違反了參照完整性,系統(tǒng)選用默認(rèn)策略,即拒絕執(zhí)行。1[例題4]顯式說(shuō)明參照完整性的違約處理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表中的相應(yīng)元組*/onupdatecascade,/*當(dāng)更新student表中的Sno時(shí),級(jí)聯(lián)更新SC表中的相應(yīng)元組*/foreignkey(sno)referencescourses(sno),,/*在表級(jí)定義參照完整性*/
ondeletenoAction/*當(dāng)刪除courses表中的元組時(shí)造成了與SC表不一致拒絕刪除*/onupdatecascade
);12/9/202240[例題4]顯式說(shuō)明參照完整性的違約處理Createtab5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處理5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處理12/9/2022415.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.1屬性上的約束條件的定義屬性值的限制,包括:列值非空(Notnull短語(yǔ))列值唯一(unique短語(yǔ))檢查列值是否滿足一個(gè)布爾表達(dá)式(Check短語(yǔ))12/9/2022425.3.1屬性上的約束條件的定義屬性值的限制,包括:125.3.1屬性上的約束條件的定義1、不允許取空值[例題5]在定義SC表時(shí),說(shuō)明Sno,Cno,Grade屬性不允許取空值。CreatetableSC(Snochar(9)notnull,Cnochar(40)notnull,Gradesmallintnotnull,Primarykey(Sno,Cno),)12/9/2022435.3.1屬性上的約束條件的定義1、不允許取空值12/75.3.1屬性上的約束條件的定義2、列值唯一[例題6]建立部門表Dept,要求部門名稱Dname列取值唯一,部門編號(hào)Deptno列為主碼。Createtabledept(Deptnonumeric(2),Dnamechar(9)nuique,Locationchar(10),Primarykey(Deptno));12/9/2022445.3.1屬性上的約束條件的定義2、列值唯一12/7/25.3.1屬性上的約束條件的定義3、用Check短語(yǔ)指定列值應(yīng)該滿足的條件[例題7]Student表的Ssex只允許取“男”或“女”。CreatetableStudents(Snochar(9)primarykey,Snomechar(8)notnull,Ssexchar(2)check(SsexIN(‘男’,’女’)),Sagesmallint,SdeptChar(20))12/9/2022455.3.1屬性上的約束條件的定義3、用Check短語(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));12/9/2022465.3.1屬性上的約束條件的定義[例題8]SC表的G5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處理5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處理12/9/2022475.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處理當(dāng)往表中插入元組或修改屬性的值時(shí),RDBMS就檢查屬性上的約束條件是否被滿足,否則拒絕執(zhí)行。12/9/2022485.3.2屬性上的約束條件檢查和違約處理當(dāng)往表中插入元組5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處12/9/2022495.3用戶定義完整性5.3.1屬性上的約束條件的定義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.%’));12/9/2022505.3.3元組上的約束條件的定義與屬性上約束條件的定義類5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處12/9/2022515.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.4元組上的約束條件檢查和違約處理當(dāng)往表中插入元組或修改屬性的值時(shí),RDBMS就檢查元組上的約束條件是否被滿足,否則拒絕執(zhí)行。12/9/2022525.3.4元組上的約束條件檢查和違約處理當(dāng)往表中插入元組5.4完整性約束命名子句1、完整性約束命令子句語(yǔ)法:Constraint<完整性約束條件>[primarykey短語(yǔ)|foreignkey短語(yǔ)|check短語(yǔ)]12/9/2022535.4完整性約束命名子句1、完整性約束命令子句12/7/5.4完整性約束命名子句[例題10]建立學(xué)生登記表Students,要求學(xué)號(hào)在90000~99999之間,姓名不能取空值,年齡小于30,性別只能是“男”或“女”。CreatetableStudents(Snonumeric(6)constraintC1check(Snobetween90000and99999),Snamechar(20)constraintC2notnull,Sagenumeric(3)constraintC3check(Sage<30),Ssexchar(2)constraintC4check(SsexIn(‘男’,‘女’)),constraintStudentKeyprimarykey(Sno));12/9/2022545.4完整性約束命名子句[例題10]建立學(xué)生登記表S5.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));12/9/2022555.4完整性約束命名子句[例題11]建立教師表tea5.4完整性約束命名子句2.修改表中的完整性限制使用Altertable語(yǔ)句[例題12]去掉[例題10]Students表中對(duì)性別的限制。AltertablestudentDropconstraintC412/9/2022565.4完整性約束命名子句2.修改表中的完整性限制12/5.4完整性約束命名子句[例題13]修改表Students表中的約束條件,要求學(xué)號(hào)改為800000~999999之間,年齡小于30改為45。先刪除原來(lái)的約束條件,再增加新的約束條件。AltertablestudentsDropconstraintC1;AltertablestudentsAddconstraintC1check(Snobetween800000and999999),AltertablestudentsDropconstraintC3;AltertablestudentsAddconstraintC3check(Sage<45);12/9/2022575.4完整性約束命名子句[例題13]修改表Stude5.5觸發(fā)器5.5.1定義觸發(fā)器5.5.2激活觸發(fā)器5.5.3刪除觸發(fā)器12/9/2022585.5觸發(fā)器5.5.1定義觸發(fā)器12/7/202255.5.1定義觸發(fā)器1、觸發(fā)器(Trigger):定義在關(guān)系表上的一類由事件驅(qū)動(dòng)的特殊過(guò)程。2、格式Createtrigger<觸發(fā)器名>{Before|After}<觸發(fā)事件>on<表名>Foreach{Row|Statement}[When<觸發(fā)條件>]<觸發(fā)動(dòng)作體>12/9/2022595.5.1定義觸發(fā)器1、觸發(fā)器(Trigger):定義在
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;12/9/2022605.5.1定義觸發(fā)器舉例[例題18]定義一個(gè)Befo
5.5.1定義觸發(fā)器[例題19]定義一個(gè)After行級(jí)觸發(fā)器,當(dāng)教師表Teacher的工資發(fā)生變化后就自動(dòng)在工資變化表Sal_log中增加一條相應(yīng)紀(jì)錄。CreatetableSal_log(Enonumric(4)referenceteacher(eno),Salnumric(7,2),Usernamechar(10),Datetimestamp);12/9/2022615.5.1定義觸發(fā)器[例題19]定義一個(gè)After
5.5.1定義觸發(fā)器Createtriggerinsert_Sal
AfterinsertonteacherForeachrowAsbegininsertintoSal_logvalues(new.Eno,new.Sal,Current_user,Current_Timestamp);End;CreatetriggerUpdate_Sal
AfterupdateonteacherForeachrowAsbeginIf(new.Sal<>old.Sal)TheninsertintoSal_logvalues(new.Eno,new.Sal,Current_user,Current_Timestamp);EndIf;End;12/9/2022625.5.1定義觸發(fā)器Createtriggerin5.5.2激活觸發(fā)器同一個(gè)表上的多個(gè)觸發(fā)器的執(zhí)行順序:執(zhí)行Before觸發(fā)器激活觸發(fā)器的SQL語(yǔ)句執(zhí)行After觸發(fā)器
12/9/2022635.5.2激活觸發(fā)器同一個(gè)表上的多個(gè)觸發(fā)器的執(zhí)行順序:15.5.2激活觸發(fā)器同一個(gè)表上的多個(gè)Before(After)的執(zhí)行順序:誰(shuí)先創(chuàng)建誰(shuí)先執(zhí)行即按創(chuàng)建觸發(fā)器的時(shí)間先后順序執(zhí)行12/9/2022645.5.2激活觸發(fā)器同一個(gè)表上的多個(gè)Before(Af5.5.2激活觸發(fā)器[例題20]執(zhí)行修改某個(gè)教師工資SQL語(yǔ)句,激活上述定義的觸發(fā)器。Updateteachersetsal=800whereEname=‘陳平’順序:執(zhí)行觸發(fā)器Insert_Or_Update_Sal;執(zhí)行Updateteachersetsal=800whereEname=‘陳平’執(zhí)行觸發(fā)器Insert_Sal;執(zhí)行觸發(fā)器Update_Sal。12/9/2022655.5.2激活觸發(fā)器[例題20]執(zhí)行修改某個(gè)教師工資5.5.3刪除觸發(fā)器語(yǔ)法:Droptrigger<觸發(fā)器名>ON<表名>;[例題21]刪除教師表Teacher上的觸發(fā)器Insert_Sal.DroptriggerInsert_SalonTeacher;12/9/2022665.5.3刪除觸發(fā)器語(yǔ)法:12/7/202266第五章作業(yè)P313/1642,5,612/9/202267第五章作業(yè)P313/16412/7/202267中國(guó)地質(zhì)大學(xué)信息工程學(xué)院數(shù)據(jù)庫(kù)系統(tǒng)概論AnIntroductiontoDatabaseSystem第五章數(shù)據(jù)庫(kù)完整性12/9/202268中國(guó)地質(zhì)大學(xué)信息工程學(xué)院數(shù)據(jù)庫(kù)系統(tǒng)概論12/7/20221什么是數(shù)據(jù)庫(kù)的完整性數(shù)據(jù)的正確性和相容性防止不合語(yǔ)義的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。關(guān)注是否真實(shí)地反映現(xiàn)實(shí)世界例:學(xué)生的年齡必須是整數(shù),取值范圍為14--29;學(xué)生的性別只能是男或女;學(xué)生的學(xué)號(hào)一定是唯一的;學(xué)生所在的系必須是學(xué)校開(kāi)設(shè)的系;提綱5.1實(shí)體完整性5.2參照完整性5.3用戶定義完整性5.4完整性約束命名子句5.5觸發(fā)器12/9/202269什么是數(shù)據(jù)庫(kù)的完整性12/7/20222數(shù)據(jù)庫(kù)的完整性與安全性
區(qū)別和聯(lián)系兩個(gè)不同的概念,但有一定的聯(lián)系;前者是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出,既所謂的垃圾進(jìn)垃圾出(GarbageinGarbageout)所造成的無(wú)效操作和錯(cuò)誤結(jié)果;后者是保護(hù)數(shù)據(jù)庫(kù)防止惡意的破壞和非法存取;安全性措施防范的對(duì)象是非法用戶,完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù).完整性控制機(jī)制1.完整性約束條件定義機(jī)制2.完整性檢查機(jī)制3.違約處理12/9/202270數(shù)據(jù)庫(kù)的完整性與安全性
區(qū)別和聯(lián)系兩個(gè)不同的概念,但有一定的完整性約束條件定義完整性約束條件:數(shù)據(jù)模型的組成部分約束數(shù)據(jù)庫(kù)中數(shù)據(jù)的語(yǔ)義DBMS應(yīng)提供定義數(shù)據(jù)庫(kù)完整性約束條件,并把它們作為模式的一部分存入數(shù)據(jù)庫(kù)中12/9/202271完整性約束條件定義完整性約束條件:數(shù)據(jù)模型的組成部分約束數(shù)據(jù)完整性檢查機(jī)制檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件
12/9/202272完整性檢查機(jī)制檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件違約處理如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。12/9/202273違約處理如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則完整性約束條件完整性約束條件作用的對(duì)象列:對(duì)屬性的取值類型、范圍、精度等的約束條件元組:對(duì)元組中各個(gè)屬性列間的聯(lián)系的約束關(guān)系:對(duì)若干元組間、關(guān)系集合上以及關(guān)系之間的聯(lián)系的約束12/9/202274完整性約束條件完整性約束條件作用的對(duì)象12/7/20227完整性約束條件(續(xù))靜態(tài)對(duì)靜態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束動(dòng)態(tài)對(duì)動(dòng)態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束12/9/202275完整性約束條件(續(xù))靜態(tài)12/7/20228完整性約束條件分類六類完整性約束條件靜態(tài)列級(jí)約束靜態(tài)元組約束靜態(tài)關(guān)系約束動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)元組約束動(dòng)態(tài)關(guān)系約束12/9/202276完整性約束條件分類六類完整性約束條件12/7/20229完整性約束條件(續(xù))1.靜態(tài)列級(jí)約束靜態(tài)列級(jí)約束:對(duì)的取值域的說(shuō)明最常見(jiàn)、最簡(jiǎn)單、最容易實(shí)現(xiàn)的一類完整性約束12/9/202277完整性約束條件(續(xù))1.靜態(tài)列級(jí)約束12/7/202210完整性約束條件(續(xù))五類靜態(tài)列級(jí)約束1)數(shù)據(jù)類型約束:數(shù)據(jù)的類型、長(zhǎng)度、單位、精度等例:學(xué)生姓名的數(shù)據(jù)類型為字符型,長(zhǎng)度為82)對(duì)數(shù)據(jù)格式的約束 例:學(xué)號(hào):前兩位表示入學(xué)年份,后四位為順序編號(hào)日期:YY.MM.DD。12/9/202278完整性約束條件(續(xù))五類靜態(tài)列級(jí)約束12/7/202211補(bǔ)充:完整性約束條件(續(xù))3)取值范圍或取值集合的約束 例:規(guī)定成績(jī)的取值范圍為0-100年齡的取值范圍為14-29性別的取值集合為[男,女]4)對(duì)空值的約束 空值:未定義或未知的值空值:與零值和空格不同有的列允許空值,有的則不允許,如成績(jī)可為空值5)其他約束 例:關(guān)于列的排序說(shuō)明,組合列等12/9/202279補(bǔ)充:完整性約束條件(續(xù))3)取值范圍或取值集合的約束12補(bǔ)充:完整性約束條件(續(xù))2.靜態(tài)元組約束規(guī)定元組的各個(gè)列之間的約束關(guān)系例:訂貨關(guān)系中發(fā)貨量<=訂貨量教師關(guān)系中教授的工資>=700元
靜態(tài)元組約束只局限在元組上12/9/202280補(bǔ)充:完整性約束條件(續(xù))2.靜態(tài)元組約束12/7/202補(bǔ)充:完整性約束條件(續(xù))3.靜態(tài)關(guān)系約束關(guān)系的各個(gè)元組之間或若干關(guān)系之間存在的各種聯(lián)系或約束常見(jiàn)靜態(tài)關(guān)系約束:1)實(shí)體完整性約束2)參照完整性約束3)函數(shù)依賴約束4)統(tǒng)計(jì)約束12/9/202281補(bǔ)充:完整性約束條件(續(xù))3.靜態(tài)關(guān)系約束12/7/202統(tǒng)計(jì)約束定義某個(gè)字段值一個(gè)關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系例:職工平均工資的2倍<=部門經(jīng)理的工資<=職工平均工資的5倍
12/9/202282統(tǒng)計(jì)約束定義某個(gè)字段值一個(gè)關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系完整性約束條件(續(xù))4.動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)列級(jí)約束是修改列定義或列值時(shí)應(yīng)滿足的約束條件12/9/202283完整性約束條件(續(xù))4.動(dòng)態(tài)列級(jí)約束12/7/202216完整性約束條件(續(xù)) 1)修改列定義時(shí)的約束 例:將原來(lái)允許空值的列改為不允許空值時(shí):該列目前已存在空值,則拒絕這種修改2)修改列值時(shí)的約束修改列值時(shí)新舊值之間要滿足的約束條件例:職工工資調(diào)整>=原來(lái)工資年齡只能增長(zhǎng)12/9/202284完整性約束條件(續(xù)) 1)修改列定義時(shí)的約束12/7/20完整性約束條件(續(xù))5.動(dòng)態(tài)元組約束修改元組值:各個(gè)字段之間要滿足的約束條件例:職工工資調(diào)整不得低于其原來(lái)工資+工齡*1.512/9/202285完整性約束條件(續(xù))5.動(dòng)態(tài)元組約束12/7/202218完整性約束條件(續(xù))6.動(dòng)態(tài)關(guān)系約束關(guān)系變化前后狀態(tài):限制條件例:事務(wù)一致性、原子性等約束條件12/9/202286完整性約束條件(續(xù))6.動(dòng)態(tài)關(guān)系約束12/7/2022195.1實(shí)體完整性5.1.1實(shí)體完整性定義5.1.2實(shí)體完整性檢查和違約處理12/9/2022875.1實(shí)體完整性12/7/2022205.1.1實(shí)體完整性定義實(shí)體完整性(EntityIntegrity)若屬性A是基本關(guān)系R的主屬性,則屬性A不能取空值例SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)POSTGRADUATE屬性為主碼(假設(shè)研究生不會(huì)重名),則其不能取空值12/9/2022885.1.1實(shí)體完整性定義實(shí)體完整性(EntityInte5.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)系。(2)現(xiàn)實(shí)世界中的實(shí)體和實(shí)體間的聯(lián)系都是可區(qū)分的,即它們具有某種唯一性標(biāo)識(shí)。(3)關(guān)系模型中以主碼作為唯一性標(biāo)識(shí)。(4)主碼中的屬性即主屬性不能取空值??罩稻褪恰安恢馈被颉盁o(wú)意義”的值。主屬性取空值,就說(shuō)明存在某個(gè)不可標(biāo)識(shí)的實(shí)體,即存在不可區(qū)分的實(shí)體,這與第(2)點(diǎn)相矛盾,因此這個(gè)規(guī)則稱為實(shí)體完整性。12/9/2022895.1.1實(shí)體完整性定義關(guān)系模型必須遵守實(shí)體完整性規(guī)則的原5.1.1實(shí)體完整性定義關(guān)系模型的實(shí)體完整性在Createtable中用PrimaryKey定義。對(duì)單屬性的構(gòu)成的碼有兩種說(shuō)明方法:定義為列級(jí)約束條件表級(jí)約束條件對(duì)多個(gè)屬性構(gòu)成的碼只有一種說(shuō)明方法,即定義為表級(jí)約束條件12/9/2022905.1.1實(shí)體完整性定義關(guān)系模型的實(shí)體完整性在Create[例題1]將Student表中的Sno屬性定義為碼。Createtablestudent(Snochar(9)primarykey,/*在列級(jí)定義主碼*/Snamechar(20)notnull,Ssexchar(2),Sagesmallint,Sdeptchar(20));5.1.1實(shí)體完整性定義12/9/202291[例題1]將Student表中的Sno屬性定義為碼。5.1.5.1.1實(shí)體完整性定義或者Createtablestudent(snochar(9),Snamechar(20)notnull,Ssexchar(2),Sagesmallint,Sdeptchar(20),primarykey(sno),/*在表級(jí)定義主碼*/);12/9/2022925.1.1實(shí)體完整性定義或者12/7/2022255.1.1實(shí)體完整性定義[例題2]將SC表中的Sno,Cno屬性組定義為碼CreatetableSC(Snochar(9)notnull,Cnochar(4)notnull,gradesmallint,Primarykey(Sno,Cno),/*只能在表級(jí)定義主碼*/);12/9/2022935.1.1實(shí)體完整性定義[例題2]將SC表中的Sno,C5.1.2實(shí)體完整性檢查和違約處理用primarykey短語(yǔ)定義了關(guān)系的主碼后,每當(dāng)應(yīng)用程序?qū)颈聿迦胍粭l記錄或者對(duì)主碼列進(jìn)行更新操作時(shí),RDBMS將自動(dòng)檢查:檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。檢查主碼地各個(gè)屬性是否為空,只要一個(gè)為空就拒絕插入或修改12/9/2022945.1.2實(shí)體完整性檢查和違約處理用primarykey5.1.2實(shí)體完整性檢查和違約處理檢查主碼值是否唯一的方法(2種):全表掃描keyif2if3if4if5ikey1f21f31f41f51key2f22f32f42f52key3f23f33f43f53..12/9/2022955.1.2實(shí)體完整性檢查和違約處理檢查主碼值是否唯一的方法5.1.2實(shí)體完整性檢查和違約處理全表掃描缺點(diǎn):耗時(shí)12/9/2022965.1.2實(shí)體完整性檢查和違約處理全表掃描缺點(diǎn):12/7/5.1.2實(shí)體完整性檢查和違約處理第二種方法:建索引(如B+樹(shù)索引)25511230667815202537304168697176798493515465新插入記錄的主碼值12/9/2022975.1.2實(shí)體完整性檢查和違約處理第二種方法:建索引(如B5.1.2實(shí)體完整性檢查和違約處理RDBMS核心一般都在主碼上自動(dòng)建立一個(gè)索引通過(guò)索引查找基本表中是否存在新的主碼值——提高效率12/9/2022985.1.2實(shí)體完整性檢查和違約處理RDBMS核心一般都在主5.2參照完整性5.2.1參照完整性定義5.2.2參照完整性檢查和違約處12/9/2022995.2參照完整性5.2.1參照完整性定義12/7/25.2.1參照完整性定義關(guān)系模型的參照完整性在Createtable中用foreignkey短語(yǔ)定義哪些列為外碼。12/9/20221005.2.1參照完整性定義關(guān)系模型的參照完整性在Creat5.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í)定義參照完整性*/);12/9/20221015.2.1參照完整性定義[例題3]定義SC中的參考完5.2.2參照完整性檢查和違約處理參照完整性將兩個(gè)表中的相應(yīng)元組聯(lián)系起來(lái)后。當(dāng)進(jìn)行增刪操作時(shí)有可能破壞參照完整性,必須進(jìn)行檢查。12/9/20221025.2.2參照完整性檢查和違約處理參照完整性將兩個(gè)表中的5.2.2參照完整性檢查和違約處理對(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屬性值與之相等12/9/20221035.2.2參照完整性檢查和違約處理對(duì)SC和Student表5.1可能破壞參照完整性的情況及違約處理被參照表(Students)參照表(例如SC)違約處理可能破壞參照完整性插入元組拒絕可能破壞參照完整性修改外碼值拒絕刪除元組可能破壞參照完整性拒絕/級(jí)聯(lián)刪除/設(shè)置為空修改主碼值可能破壞參照完整性拒絕/級(jí)聯(lián)修改除/設(shè)置為空12/9/2022104表5.1可能破壞參照完整性的情況及違約處理被參照表(Stu處理策略1、拒絕(Noaction)執(zhí)行不允許該操作執(zhí)行。該策略一般為默認(rèn)策略。2、級(jí)聯(lián)(Cascade)操作當(dāng)刪除或修改被參照表(Students)的一個(gè)元組造成了與參照表(SC)的不一致,則刪除或修改參照表中的所有造成不一致的元組。例如,刪除Students表中的元組,Sno值為200215121則要從SC表中級(jí)聯(lián)刪除SC.Sno=‘200215121’的所有元組。3、設(shè)置空值(Set-Null) 例如:學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào),年齡)專業(yè)(專業(yè)號(hào),專業(yè)名)專業(yè)號(hào)可以取空值但在學(xué)生-選課數(shù)據(jù)庫(kù)中,Students關(guān)系為被參照關(guān)系,其主碼為Sno,SC為參考關(guān)系,Sno為外碼。若SC的Sno為空值,則表明。。。。12/9/2022105處理策略1、拒絕(Noaction)執(zhí)行12/7/2022處理策略若違反了參照完整性,系統(tǒng)選用默認(rèn)策略,即拒絕執(zhí)行。如果想讓系統(tǒng)采用其他策略則必須在創(chuàng)建表的時(shí)候顯式地加以說(shuō)明。12/9/2022106處理策略若違反了參照完整性,系統(tǒng)選用默認(rèn)策略,即拒絕執(zhí)行。1[例題4]顯式說(shuō)明參照完整性的違約處理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表中的相應(yīng)元組*/onupdatecascade,/*當(dāng)更新student表中的Sno時(shí),級(jí)聯(lián)更新SC表中的相應(yīng)元組*/foreignkey(sno)referencescourses(sno),,/*在表級(jí)定義參照完整性*/
ondeletenoAction/*當(dāng)刪除courses表中的元組時(shí)造成了與SC表不一致拒絕刪除*/onupdatecascade
);12/9/2022107[例題4]顯式說(shuō)明參照完整性的違約處理Createtab5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處理5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處理12/9/20221085.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.1屬性上的約束條件的定義屬性值的限制,包括:列值非空(Notnull短語(yǔ))列值唯一(unique短語(yǔ))檢查列值是否滿足一個(gè)布爾表達(dá)式(Check短語(yǔ))12/9/20221095.3.1屬性上的約束條件的定義屬性值的限制,包括:125.3.1屬性上的約束條件的定義1、不允許取空值[例題5]在定義SC表時(shí),說(shuō)明Sno,Cno,Grade屬性不允許取空值。CreatetableSC(Snochar(9)notnull,Cnochar(40)notnull,Gradesmallintnotnull,Primarykey(Sno,Cno),)12/9/20221105.3.1屬性上的約束條件的定義1、不允許取空值12/75.3.1屬性上的約束條件的定義2、列值唯一[例題6]建立部門表Dept,要求部門名稱Dname列取值唯一,部門編號(hào)Deptno列為主碼。Createtabledept(Deptnonumeric(2),Dnamechar(9)nuique,Locationchar(10),Primarykey(Deptno));12/9/20221115.3.1屬性上的約束條件的定義2、列值唯一12/7/25.3.1屬性上的約束條件的定義3、用Check短語(yǔ)指定列值應(yīng)該滿足的條件[例題7]Student表的Ssex只允許取“男”或“女”。CreatetableStudents(Snochar(9)primarykey,Snomechar(8)notnull,Ssexchar(2)check(SsexIN(‘男’,’女’)),Sagesmallint,SdeptChar(20))12/9/20221125.3.1屬性上的約束條件的定義3、用Check短語(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));12/9/20221135.3.1屬性上的約束條件的定義[例題8]SC表的G5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處理5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處理12/9/20221145.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處理當(dāng)往表中插入元組或修改屬性的值時(shí),RDBMS就檢查屬性上的約束條件是否被滿足,否則拒絕執(zhí)行。12/9/20221155.3.2屬性上的約束條件檢查和違約處理當(dāng)往表中插入元組5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處12/9/20221165.3用戶定義完整性5.3.1屬性上的約束條件的定義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.%’));12/9/20221175.3.3元組上的約束條件的定義與屬性上約束條件的定義類5.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.2屬性上的約束條件檢查和違約處5.3.3元組上的約束條件的定義5.3.4元組上的約束條件檢查和違約處12/9/20221185.3用戶定義完整性5.3.1屬性上的約束條件的定義5.3.4元組上的約束條件檢查和違約處理當(dāng)往表中插入元組或修改屬性的值時(shí),RDBMS就檢查元組上的約束條件是否被滿足,否則拒絕執(zhí)行。12/9/20221195.3.4元組上的約束條件檢查和違約處理當(dāng)往表中插入元組5.4完整性約束命名子句1、完整性約束命令子句語(yǔ)法:Constraint<完整性約束條件>[primarykey短語(yǔ)|foreignkey短語(yǔ)|check短語(yǔ)]12/9/20221205.4完整性約束命名子句1、完整性約束命令子句12/7/5.4完整性約束命名子句[例題10]建立學(xué)生登記表Students,要求學(xué)號(hào)在90000~99999之間,姓名不能取空值,年齡小于30,性別只能是“男”或“女”。CreatetableStudents(Snonumeric(6)constraintC1check(Snobetween90000and99999),Snamechar(20)constraintC2notnull,Sagenumeric(3)constraintC3check(Sage<30),Ssexchar(2)constraintC4check(SsexIn(‘男’,‘女’)),constraintStudentKeyprimarykey(Sno));12/9/20221215.4完整性約束命名子句[例題10]建立學(xué)生登記表S5.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));12
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 語(yǔ)文園地五小牧童顛倒村作文
- 一年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)集錦
- 南京工業(yè)大學(xué)浦江學(xué)院《影視鑒賞》2021-2022學(xué)年第一學(xué)期期末試卷
- 人人安康課件教學(xué)課件
- 分?jǐn)?shù)的初步認(rèn)識(shí)說(shuō)課稿
- 南京工業(yè)大學(xué)浦江學(xué)院《汽車構(gòu)造》2021-2022學(xué)年第一學(xué)期期末試卷
- 《圓環(huán)的面積》說(shuō)課稿
- 《消防安全》說(shuō)課稿
- 南京工業(yè)大學(xué)浦江學(xué)院《房屋建筑學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 南京工業(yè)大學(xué)浦江學(xué)院《汽車評(píng)估》2023-2024學(xué)年第一學(xué)期期末試卷
- 運(yùn)動(dòng)康復(fù)服務(wù)行業(yè)五年發(fā)展洞察報(bào)告
- 2024年甘肅酒泉肅州區(qū)選拔項(xiàng)目人員納入編制管理107人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 2025版 高考試題分析-數(shù)學(xué)-部分4
- 醫(yī)療器械創(chuàng)新售后服務(wù)體系建設(shè)與應(yīng)用示范閱讀札記
- 汽油機(jī)油低速早燃性能測(cè)試方法編制說(shuō)明
- 2023-2024學(xué)年山東省濟(jì)南市歷城區(qū)九年級(jí)(上)期中英語(yǔ)試卷
- 2024年全國(guó)注冊(cè)消防工程師之消防技術(shù)綜合能力考試歷年考試題(詳細(xì)參考解析)
- IWAY6.0實(shí)施計(jì)劃完整
- 《慈母情深》教學(xué)設(shè)計(jì)與指導(dǎo)課件(第二課時(shí))
- 法律顧問(wèn)服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 人教版八年級(jí)上冊(cè)數(shù)學(xué)期中考試壓軸題專練
評(píng)論
0/150
提交評(píng)論