版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)庫(kù)完整性,5.1 實(shí)體的完整性 5.2 參照完整性 5.3 用戶定義的完整性 5.4 完整性約束命名子句 *5.5 約中的完整性限制 5.6 觸發(fā)器 5.7 小結(jié),數(shù)據(jù)的正確性和相容性 防止不合語(yǔ)義的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。 例: 學(xué)生的年齡必須是整數(shù),取值范圍為14-29; 學(xué)生的性別只能是男或女; 學(xué)生的學(xué)號(hào)一定是唯一的; 學(xué)生所在的系必須是學(xué)校開(kāi)設(shè)的系; 完整性:真實(shí)地反映現(xiàn)實(shí)世界,一、什么是數(shù)據(jù)庫(kù)的完整性,二、DBMS的完整性控制機(jī)制,1. 定義功能 一個(gè)完善的完整性控制機(jī)制應(yīng)該允許用戶定義各類完整性約束條件。,例:銀行數(shù)據(jù)庫(kù)中“借貸總金額應(yīng)平衡”的約束就應(yīng)該是延遲執(zhí)行的約束,3. 違約反
2、應(yīng),檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件,如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。,立即執(zhí)行的約束(Immediate constraints) 語(yǔ)句執(zhí)行完后立即檢查是否違背完整性約束 延遲執(zhí)行的約束(Deferred constrainsts) 完整性檢查延遲到整個(gè)事務(wù)執(zhí)行結(jié)束后進(jìn)行,2. 檢查功能,拒絕該操作 其他處理方法,5.1 實(shí)體完整性,一、實(shí)體完整性定義 實(shí)體完整性規(guī)則:關(guān)系中的碼不能為空也不能重復(fù)。 定義方法:在CREATE TABLE中用PRIMARY KEY。 二、實(shí)體完整性檢查和違約處理 檢查:插入操作或更改碼的值時(shí)。
3、 處理:拒絕執(zhí)行,5.2 參照完整性,一、參照完整性定義 參照完整性規(guī)則:關(guān)系中的外碼或者取空值,或者等于被參照關(guān)系中某個(gè)元組的主碼值。 定義方法:在CREATE TABLE中用FOREIGN KEY。 二、參照完整性檢查和違約處理 檢查:對(duì)參照表和被參照表進(jìn)行增、刪、改操作時(shí),有可能破壞參照完整性,必須進(jìn)行檢查。 處理:見(jiàn)表5.1,表5.1 可能破壞參照完整性的情況及違約處理,1. 在被參照關(guān)系中刪除元組時(shí)的問(wèn)題,例:要?jiǎng)h除Student關(guān)系中Sno=200215122的元組, 而SC關(guān)系中有4個(gè)元組的Sno都等于200215122 。 級(jí)聯(lián)刪除:將SC關(guān)系中所有4個(gè)Sno= 2002151
4、22的元組一起刪除。如果參照關(guān)系同時(shí)又是另一個(gè)關(guān)系的被參照關(guān)系,則這種刪除操作會(huì)繼續(xù)級(jí)聯(lián)下去 受限刪除:系統(tǒng)將拒絕執(zhí)行此刪除操作。 置空值刪除:將SC關(guān)系中所有Sno= 200215122的元組的Sno值置為空值。 在學(xué)生選課數(shù)據(jù)庫(kù)中,顯然第一種方法和第二種方法都是對(duì)的。第三種方法不符合應(yīng)用環(huán)境語(yǔ)義。,2. 在參照關(guān)系中插入元組時(shí)的問(wèn)題,出現(xiàn)違約操作的情形 需要在參照關(guān)系中插入元組,而被參照關(guān)系不存在相應(yīng)的元組。 違約反應(yīng) 受限插入 遞歸插入,僅當(dāng)被參照關(guān)系中存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同時(shí),系統(tǒng)才執(zhí)行插入操作,否則拒絕此操作。,首先向被參照關(guān)系中插入相應(yīng)的元組,其主碼
5、值等于參照關(guān)系插入元組的外碼值,然后向參照關(guān)系插入元組。,例:向SC關(guān)系插入( 200215125 ,1,90)元組,而Student關(guān)系中尚沒(méi)有Sno= 200215125的學(xué)生 受限插入: 系統(tǒng)將拒絕向SC關(guān)系插入( 200215125 ,1,90)元組。 遞歸插入: 系統(tǒng)將首先向Student關(guān)系插入Sno= 200215125的元組,然后向SC關(guān)系插入( 200215125 ,1,90)元組。,3. 修改被參照關(guān)系中主碼的問(wèn)題,兩種策略 (1) 允許修改主碼 (2) 不允許修改主碼,(1)允許修改主碼策略,違約操作 要修改被參照關(guān)系中某些元組的主碼值,而參照關(guān)系中有些元組的外碼值正好等
6、于被參照關(guān)系要修改的主碼值。 要修改參照關(guān)系中某些元組的主碼值,而被參照關(guān)系中沒(méi)有任何元組的外碼值等于被參照關(guān)系修改后的主碼值。 違約反應(yīng) (1):修改的關(guān)系是被參照關(guān)系:與刪除類似 級(jí)連修改 受限修改 置空值修改,修改被參照關(guān)系中主碼值同時(shí),用相同的方法修改參照關(guān)系中相應(yīng)的外碼值。,拒絕此修改操作。只當(dāng)參照關(guān)系中沒(méi)有任何元組的外碼值等于被參照關(guān)系中某個(gè)元組的主碼值時(shí),這個(gè)元組的主碼值才能被修改。,修改被參照關(guān)系中主碼值,同時(shí)將參照關(guān)系中相應(yīng)的外碼值置為空值。,違約反應(yīng) (2) : 修改的關(guān)系是參照關(guān)系:與插入類似。 受限插入 遞歸插入,(1)允許修改主碼策略,例:將Student關(guān)系中Sno
7、= 200215123的元組中Sno值改為200215128。而SC關(guān)系中有 4個(gè)元組的Sno= 200215123 級(jí)聯(lián)修改:將SC關(guān)系中4個(gè)Sno= 200215123元組中的Sno值也改為200215128 。如果參照關(guān)系同時(shí)又是另一個(gè)關(guān)系的被參照關(guān)系,則這種修改操作會(huì)繼續(xù)級(jí)聯(lián)下去。 受限修改:只有SC中沒(méi)有任何元組的Sno= 200215123時(shí),才能修改Student表中Sno= 200215123的元組的Sno值改為200215128 。 置空值修改:將Student表中Sno= 200215123的元組的Sno值改為200215128 。而將SC表中所有Sno= 20021512
8、3的元組的Sno值置為空值。 在學(xué)生選課數(shù)據(jù)庫(kù)中只有第一種方法是正確的。,參照完整性的實(shí)現(xiàn),RDBMS在實(shí)現(xiàn)參照完整性時(shí): 需要向用戶提供定義主碼、外碼的機(jī)制; 向用戶提供按照自己的應(yīng)用要求選擇處理依賴關(guān)系中對(duì)應(yīng)的元組的方法; 一般地,當(dāng)對(duì)參照表和被參照表的操作違反了參照完整性,系統(tǒng)選用默認(rèn)策略,即拒絕執(zhí)行。如果想讓系統(tǒng)采用其它的策略則必須在創(chuàng)建表的時(shí)候顯式說(shuō)明。,例4 顯式說(shuō)明參照完整性的違約處理。 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY key (Sno, Cn
9、o), FOREIGN KEY (Sno) REFERENCES Student(Sno)ON DELETE CASCADEON UPDATE CASCADE, FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE ON ACTION ON UPDATE CASCADE, );,5.3 用戶定義的完整性,一、屬性上約束條件的定義 在CREATE TABLE中定義屬性的同時(shí)可以根據(jù)應(yīng)用要求,定義屬性上的約束條件,即屬性值的限制。 列值非空(NOT NULL) 列值唯一(UNIQUE) 檢查列值是否滿足一個(gè)布爾表達(dá)式(CHECK) 例5 在定義SC表
10、時(shí),說(shuō)明Sno,Cno,Grade屬性不允許取空值。 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT NOT NULL, PRIMARY key (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );,例6 建立部門(mén)表DEPT,要求部門(mén)名稱Dname列取值唯一,部門(mén)編號(hào)Deptno列為主碼。 CREATE TABLE DEPT (Deptno NUME
11、RIC(2) NOT NULL, Dname CHAR(9) UNIQUE, Location char(10), PRIMARY key (Deptno) ); 例7 Student表的Ssex 只允許取“男”或“女”。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK(Seex IN(男,女), Sage SMALLINT, Sdept CHAR(20) );,例8 SC表中的值應(yīng)該在0和100之間。 CREATE TABLE SC (Sno CHAR(9) N
12、OT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT CHECK(Grade=0 AND Grade=100), PRIMARY key (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );,CREATE TABLE SC (Sno CHAR(9) NOT NULL,; Cno CHAR(4) NOT NULL, ; Grade int(3) CHECK(GRADE=0 AND GRADE=100),; PRIMA
13、RY key Sno+Cno tag kk,; FOREIGN KEY Sno tag k1 REFERENCES Student ,; FOREIGN KEY Cno tag k2 REFERENCES Course),二、屬性上的約束條件檢查和違約處理拒絕 三、元組上的約束條件定義,例9 當(dāng)學(xué)生性別是男時(shí)不允許以Ms.打頭。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK(Seex IN(男,女), Sage SMALLINT, Sdept CHAR(20)
14、CHECK (Seex=女 OR Sname NOT LIKE MS.% ); 四、元組上的約束條件檢查和違約處理拒絕,5.4 完整性約束命名子句,一、完整性約束命名子句 CONSTRAINT PRIMARY KEY 短語(yǔ)|FOREIGN KEY短語(yǔ)|CHECK短語(yǔ) 例10建立學(xué)生登記表Student,要求學(xué)號(hào)在90000至99999之間,姓名不能為空,年齡30,性別只能是男或女 。 CREATE TABLE Student (Sno CHAR(6) CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999), Sname CHAR(8) CONSTRAI
15、NT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK(Sage30) , Ssex CHAR(2) CONSTRAINT C4 CHECK(Seex IN(男,女), CONSTRAINT StudentKey PRIMARY KEY(Sno) );,例11 :建立教師表TEACHER,要求每個(gè)職工的應(yīng)發(fā)工資不低于3000元。 應(yīng)發(fā)工資實(shí)際上就是實(shí)發(fā)工資列Sal與扣除項(xiàng)Deduct之和。 CREATE TABLE TEACHER (Eno NUMBER(4) PRIMARY KEY, Ename CHAR(10), Job CHAR(8), S
16、al NUMBER(7,2), Deduct NUMBER(7,2) Deptno NUMBER(2), CONSTRAINTS TEACHERKEY FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno) CONSTRAINTS C1 CHECK (Sal + Deduct =3000);,二、修改表中的完整性限制 例12 去掉例10中對(duì)性別的限制。 ALTER TABLE Student DROP CONSTRAINT C4;,例13 修改表中的約束條件,要求學(xué)號(hào)改為在900000999999之間年齡小于30改為小于40。 ALTER TABLE Stud
17、ent DROP CONSTRAINT C1;,ALTER TABLE Student ADD CONSTRAINT C1CHECK(Sno BETWEEN 90000 0AND 999999) ; ALTER TABLE Student DROP CONSTRAINT C3;,ALTER TABLE Student ADD CONSTRAINT C3CHECK(Sage 40) ;,二、修改表中的完整性限制,例14建立一個(gè)性別域,并聲明性別取值的范圍。 CREATE DOMAIN GenderDomain CHAR(2)CHECK(VALUE IN (男,女); 這樣例10中的說(shuō)明可以改為:
18、Seex GenderDomain,5.6 觸發(fā)器,數(shù)據(jù)庫(kù)觸發(fā)器:是用戶定義在關(guān)系表上的一類由事務(wù)驅(qū)動(dòng)的特殊過(guò)程; 一旦定義,任何用戶對(duì)該數(shù)據(jù)的增、刪、改操作均由服務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器,在核心層進(jìn)行集中的完整性控制; 觸發(fā)器類似于約束,但比約束更加靈活,可以實(shí)施比更為復(fù)雜的檢查和操作,具有 更精細(xì)更強(qiáng)大的數(shù)據(jù)控制能力。 定義其它的完整性約束時(shí),需要用數(shù)據(jù)庫(kù)觸發(fā)器(Trigger)來(lái)實(shí)現(xiàn)。,說(shuō)明: 表的擁有者即創(chuàng)建表的用戶才可以在表上創(chuàng)建觸發(fā)器,并且一個(gè)表上只能創(chuàng)建一定數(shù)量的觸發(fā)器; 觸發(fā)器名可以包含模式名,也可以不包含模式名。同一模式下,觸發(fā)器名必須是唯一 的,并且觸發(fā)器名和必須在同一模式下; 表名是指當(dāng)這個(gè)表數(shù)據(jù)發(fā)生變化時(shí),將激活定義在該表上相應(yīng) 的觸發(fā)器; 觸發(fā)事件可以是INSERT、DELETE和UPDATE,也可以是這幾個(gè)事件的組合。UPDATE 后面還可以有OF,即進(jìn)一步指明修改哪些列時(shí)觸發(fā)器激活。 觸發(fā)類型:FOR EACH ROW(行級(jí)觸發(fā)器)和FOR EACH STATEMENT(語(yǔ)句級(jí)觸發(fā)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 飛機(jī)搜救知識(shí)培訓(xùn)課件
- 農(nóng)村開(kāi)園活動(dòng)策劃方案(3篇)
- 慶陽(yáng)美食活動(dòng)策劃方案(3篇)
- 2026廣東佛山順德區(qū)杏壇鎮(zhèn)林文恩中學(xué)招聘臨聘教師4人備考考試題庫(kù)及答案解析
- 2026年上半年黑龍江事業(yè)單位聯(lián)考省衛(wèi)生健康委員會(huì)招聘125人備考考試試題及答案解析
- 飛機(jī)介紹科普
- 2026廣西北海市銀海區(qū)福成鎮(zhèn)人民政府招錄公益性崗位人員12人參考考試題庫(kù)及答案解析
- 2026湖北武漢大型電池制造型企業(yè)招聘?jìng)淇伎荚囶}庫(kù)及答案解析
- 2026年福建莆田市城廂區(qū)霞林學(xué)校小學(xué)部自主招聘編外教師2人備考考試題庫(kù)及答案解析
- 2026山東菏澤國(guó)花中等職業(yè)學(xué)校機(jī)電學(xué)科教師招聘?jìng)淇伎荚囋囶}及答案解析
- 福建省福州市福清市2024-2025學(xué)年二年級(jí)上學(xué)期期末考試語(yǔ)文試卷
- 2025年CAR-NK細(xì)胞治療臨床前數(shù)據(jù)
- 班團(tuán)活動(dòng)設(shè)計(jì)
- 黨參對(duì)人體各系統(tǒng)作用的現(xiàn)代藥理研究進(jìn)展
- 肺結(jié)節(jié)的影像學(xué)表現(xiàn)
- 藥廠新員工培訓(xùn)課件
- 放射性皮膚損傷護(hù)理指南
- 2025年青島市中考數(shù)學(xué)試卷(含答案解析)
- 下肢動(dòng)脈栓塞的護(hù)理
- 總經(jīng)理聘用管理辦法
- 長(zhǎng)護(hù)險(xiǎn)護(hù)理培訓(xùn)
評(píng)論
0/150
提交評(píng)論