第5章 數(shù)據(jù)庫(kù)完整性
1什么是數(shù)據(jù)庫(kù)的完整性?
答:
數(shù)據(jù)庫(kù)的完整性是指數(shù)據(jù)的正確性和相容性。
?
2 .?dāng)?shù)據(jù)庫(kù)的完整性概念與數(shù)據(jù)庫(kù)的安全性概念有什么區(qū)別和聯(lián)系?
答:
數(shù)據(jù)的完整性和安全性是兩個(gè)不同的概念,但是有一定的聯(lián)系。前者是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出,即所謂垃圾進(jìn)垃圾出( Garba : e In Garba : e out )所造成的無(wú)效操作和錯(cuò)誤結(jié)果。后者是保護(hù)數(shù)據(jù)庫(kù)防止惡意的破壞和非法的存取。也就是說(shuō),安全性措施的防范對(duì)象是非法用戶(hù)和非法操作,完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。
?
3 .什么是數(shù)據(jù)庫(kù)的完整性約束條件?可分為哪幾類(lèi)?
答
完整性約束條件是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)應(yīng)該滿(mǎn)足的語(yǔ)義約束條件。一般可以分為六類(lèi):靜態(tài)列級(jí)約束、靜態(tài)元組約束、靜態(tài)關(guān)系約束、動(dòng)態(tài)列級(jí)約束、動(dòng)態(tài)元組約束、動(dòng)態(tài)關(guān)系約束。靜態(tài)列級(jí)約束是對(duì)一個(gè)列的取值域的說(shuō)明,包括以下幾個(gè)方面: ( l )對(duì)數(shù)據(jù)類(lèi)型的約束,包括數(shù)據(jù)的類(lèi)型、長(zhǎng)度、單位、精度等; ( 2 )對(duì)數(shù)據(jù)格式的約束; ( 3 )對(duì)取值范圍或取值集合的約束; ( 4 )對(duì)空值的約束; ( 5 )其他約束。靜態(tài)元組約束就是規(guī)定組成一個(gè)元組的各個(gè)列之間的約束關(guān)系,靜態(tài)元組約束只局限在單個(gè)元組上。靜態(tài)關(guān)系約束是在一個(gè)關(guān)系的各個(gè)元組之間或者若干關(guān)系之間常常存在各種聯(lián)系或約束。
常見(jiàn)的靜態(tài)關(guān)系約束有: ( l )實(shí)體完整性約束; ( 2 )參照完整性約束; ( 3 )函數(shù)依賴(lài)約束。
動(dòng)態(tài)列級(jí)約束是修改列定義或列值時(shí)應(yīng)滿(mǎn)足的約束條件,包括下面兩方面: ( l )修改列定義時(shí)的約束; ( 2 )修改列值時(shí)的約束。動(dòng)態(tài)元組約束是指修改某個(gè)元組的值時(shí)需要參照其舊值,并且新舊值之間需要滿(mǎn)足某種約束條件。動(dòng)態(tài)關(guān)系約束是加在關(guān)系變化前后狀態(tài)上的限制條件,例如事務(wù)一致性、原子性等約束條件。
?
4 . DBMS 的完整性控制機(jī)制應(yīng)具有哪些功能?
答:
DBMS 的完整性控制機(jī)制應(yīng)具有三個(gè)方面的功能: ( l )定義功能,即提供定義完整性約束條件的機(jī)制; ( 2 )檢查功能,即檢查用戶(hù)發(fā)出的操作請(qǐng)求是否違背了完整性約束條件;( 3 )違約反應(yīng):如果發(fā)現(xiàn)用戶(hù)的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。
?
?5 . RDBMS 在實(shí)現(xiàn)參照完整性時(shí)需要考慮哪些方面?
答
RDBMs 在實(shí)現(xiàn)參照完整性時(shí)需要考慮以下幾個(gè)方面:
( l )外碼是否可以接受空值。
( 2 )冊(cè) l 除被參照關(guān)系的元組時(shí)的考慮,這時(shí)系統(tǒng)可能采取的作法有三種: l )級(jí)聯(lián)刪除( CASCADES ) ; 2 )受限刪除( RESTRICTED ) ; 3 )置空值刪除( NULLIFIES )。 ( 3 )在參照關(guān)系中插入元組時(shí)的問(wèn)題,這時(shí)系統(tǒng)可能采取的作法有: l )受限插入; 2 )遞歸插入。
( 4 )修改關(guān)系中主碼的問(wèn)題。一般是不能用 UPDATE 語(yǔ)句修改關(guān)系主碼的。如果需要修改主碼值,只能先刪除該元組,然后再把具有新主碼值的元組插入到關(guān)系中。如果允許修改主碼,首先要保證主碼的惟一性和非空,否則拒絕修改。然后要區(qū)分是參照關(guān)系還是被參照關(guān)系。
?
6 .假設(shè)有下面兩個(gè)關(guān)系模式:職工(職工號(hào),姓名,年齡,職務(wù),工資,部門(mén)號(hào)),其中職工號(hào)為主碼;部門(mén)(部門(mén)號(hào),名稱(chēng),經(jīng)理名,電話),其中部門(mén)號(hào)為主碼。用 sQL 語(yǔ)言定義這兩個(gè)關(guān)系模式,要求在模式中完成以下完整性約束條件的定義:定義每個(gè)模式的主碼;定義參照完整性;定義職工年齡不得超過(guò) 60 歲。
答
CREATE TABLE DEPT
????(Deptno NUMBER(2),
?????Deptname VARCHAR(10),
?????Manager VARCHAR(10),
?????PhoneNumber Char(12)
?????CONSTRAINT PK_SC RIMARY KEY(Deptno));
CREATE TABLE EMP
????(Empno NUMBER(4),
?????Ename VARCHAR(10),
?????Age NUMBER(2),
?????CONSTRAINT C1 CHECK ( Aage<=60),
??????Job VARCHAR(9),
??????Sal NUMBER(7,2),
??????Deptno NUMBER(2),
??????CONSTRAINT FK_DEPTNO
?????????FOREIGN KEY(Deptno)
?????????REFFERENCES DEPT(Deptno));
?
7 .關(guān)系系統(tǒng)中,當(dāng)操作違反實(shí)體完整性、參照完整性和用戶(hù)定義的完整性約束條件時(shí),一般是如何分別進(jìn)行處理的?
答:
對(duì)于違反實(shí)體完整性和用戶(hù)定義的完整性的操作一般都采用拒絕執(zhí)行的方式進(jìn)行處理。而對(duì)于違反參照完整性的操作,并不都是簡(jiǎn)單地拒絕執(zhí)行,有時(shí)要根據(jù)應(yīng)用語(yǔ)義執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫(kù)的正確性。
?
第6章 關(guān)系數(shù)據(jù)庫(kù)理論
1 .理解并給出下列術(shù)語(yǔ)的定義:
函數(shù)依賴(lài)、部分函數(shù)依賴(lài)、完全函數(shù)依賴(lài)、傳遞依賴(lài)、候選碼、主碼、外碼、全碼(All 一key )、1 NF 、ZNF 、3NF 、BcNF 、多值依賴(lài)、4NF 。
定義1:設(shè)R(U)是屬性集U上的關(guān)系模式。X,Y是屬性集U的子集。若對(duì)于R(U)的任意一個(gè)可能的關(guān)系r,r中不可能存在兩個(gè)元組在X上的屬性值相等,而在Y上的屬性值不等,則稱(chēng)X函數(shù)確定Y或Y函數(shù)依賴(lài)于X,記作XàY。(即只要X上的屬性值相等,Y上的值一定相等。)
術(shù)語(yǔ)和記號(hào):
XàY,但Y不是X的子集,則稱(chēng)XàY是非平凡的函數(shù)依賴(lài)。若不特別聲明,總是討論非平凡的函數(shù)依賴(lài)。
XàY,但Y是X的子集,則稱(chēng)XàY是平凡的函數(shù)依賴(lài)。
若XàY,則X叫做決定因素(Determinant)。
若XàY,YàX,則記作X?àY。
若Y不函數(shù)依賴(lài)于X,則記作X à?Y。
定義2:在R(U)中,如果 XàY,并且對(duì)于X的任何一個(gè)真子集X’,都有X’?à?Y,則稱(chēng)Y對(duì)X完全函數(shù)依賴(lài)
???????若XàY,但Y不完全函數(shù)依賴(lài)于X,則稱(chēng)Y對(duì)X部分函數(shù)依賴(lài)
定義3:若關(guān)系模式R的每一個(gè)分量是不可再分的數(shù)據(jù)項(xiàng),則關(guān)系模式R屬于第一范式(1NF)。
定義4:若關(guān)系模式R∈1NF,且每一個(gè)非主屬性完全函數(shù)依賴(lài)于碼,則關(guān)系模式R∈2NF 。(即1NF消除了非主屬性對(duì)碼的部分函數(shù)依賴(lài)則成為2NF)。
定義5:關(guān)系模式R<U,F>?中若不存在這樣的碼X、屬性組Y及非主屬性Z(Z不是Y的子集)使得XàY,Y à?X,Y à?Z成立,則稱(chēng)R<U,F>∈3NF。
定義6:關(guān)系模式R<U,F>∈1NF 。若XàY且Y不是X的子集時(shí),X必含有碼,則R<U,F>∈BCNF。
定義7:關(guān)系模式R<U,F>∈1NF,如果對(duì)于R的每個(gè)非平凡多值依賴(lài)XààY(Y不是X的子集,Z=U-X-Y不為空),X都含有碼,則稱(chēng)R<U,F>∈4NF。
2.建立一個(gè)關(guān)于系、學(xué)生、班級(jí)、學(xué)會(huì)等諸信息的關(guān)系數(shù)據(jù)庫(kù)。
學(xué)生:學(xué)號(hào)、姓名、出生年月、系名、班號(hào)、宿舍區(qū)。
班級(jí):班號(hào)、專(zhuān)業(yè)名、系名、人數(shù)、入校年份。
系:系名、系號(hào)、系辦公地點(diǎn)、人數(shù)。
學(xué)會(huì):學(xué)會(huì)名、成立年份、辦公地點(diǎn)、人數(shù)。
????語(yǔ)義如下:一個(gè)系有若干專(zhuān)業(yè),每個(gè)專(zhuān)業(yè)每年只招一個(gè)班,每個(gè)班有若干學(xué)生。一個(gè)系的學(xué)生住在同一宿舍區(qū)。每個(gè)學(xué)生可參加若干學(xué)會(huì),每個(gè)學(xué)會(huì)有若干學(xué)生。學(xué)生參加某學(xué)會(huì)有一個(gè)入會(huì)年份。
請(qǐng)給出關(guān)系模式,寫(xiě)出每個(gè)關(guān)系模式的極小函數(shù)依賴(lài)集,指出是否存在傳遞函數(shù)依賴(lài),對(duì)于函數(shù)依賴(lài)左部是多屬性的情況討論函數(shù)依賴(lài)是完全函數(shù)依賴(lài),還是部分函數(shù)依賴(lài)。指出各關(guān)系模式的候選碼、外部碼,有沒(méi)有全碼存在?
解:(1)關(guān)系模式如下:
??學(xué)生:S(Sno,Sname,Sbirth,Dept,Class,Rno)
??班級(jí):C(Class,Pname,Dept,Cnum,Cyear)
??系:D(Dept,Dno,Office,Dnum)
??學(xué)會(huì):M(Mname,Myear,Maddr,Mnum)
??(2)每個(gè)關(guān)系模式的最小函數(shù)依賴(lài)集如下:
??A、學(xué)生S (Sno,Sname,Sbirth,Dept,Class,Rno) 的最小函數(shù)依賴(lài)集如下:SnoàSname,SnoàSbirth,SnoàClass,ClassàDept,DEPTàRno
????傳遞依賴(lài)如下:
由于SnoàDept,而DeptàSno ,DeptàRno(宿舍區(qū))
?
所以Sno與Rno之間存在著傳遞函數(shù)依賴(lài)。
????由于ClassàDept,Dept à?Class,DeptàRno
?????????所以Class與Rno之間存在著傳遞函數(shù)依賴(lài)。
????由于SnoàClass,ClassàSno,ClassàDept
?????????所以Sno與Dept之間存在著傳遞函數(shù)依賴(lài)。
??B、班級(jí)C(Class,Pname,Dept,Cnum,Cyear)的最小函數(shù)依賴(lài)集如下:
????ClassàPname,ClassàCnum,ClassàCyear,PnameàDept.
????由于ClassàPname,PnameàClass,PnameàDept
????????所以C1ass與Dept之間存在著傳遞函數(shù)依賴(lài)。
?C、系D(Dept,Dno,Office,Dnum)的最小函數(shù)依賴(lài)集如下:
????DeptàDno,DnoàDept,DnoàOffice,DnoàDnum
????根據(jù)上述函數(shù)依賴(lài)可知,Dept與Office,Dept與Dnum之間不存在傳遞依賴(lài)。
?D、學(xué)會(huì)M(Mname,Myear,Maddr,Mnum)的最小函數(shù)依賴(lài)集如下:
????MnameàMyear,MnameàMaddr,MnameàMnum
?????該模式不存在傳遞依賴(lài)。
??(3)各關(guān)系模式的候選碼、外部碼,全碼如下:
??A、學(xué)生S候選碼:Sno;外部碼:Dept、Class;無(wú)全碼
??B、班級(jí)C候選碼:Class;外部碼:Dept;無(wú)全碼
??C、系D候選碼:Dept或Dno;無(wú)外部碼;無(wú)全碼
??D、學(xué)會(huì)M候選碼:Mname;無(wú)外部碼;無(wú)全碼
7.下面的結(jié)論哪些是正確的? 哪些是錯(cuò)誤的? 對(duì)于錯(cuò)誤的請(qǐng)給一個(gè)反例說(shuō)明之。
(1)任何一個(gè)二目關(guān)系是屬于3NF。
答:正確。因?yàn)殛P(guān)系模式中只有兩個(gè)屬性,所以無(wú)傳遞。
(2)任何一個(gè)二目關(guān)系是屬于BCNF.
答:正確。按BCNF的定義,若XàY,且Y不是X的子集時(shí),每個(gè)決定因素都包含碼,對(duì)于二目關(guān)系決定因素必然包含碼。詳細(xì)證明如下:(任何二元關(guān)系模式必定是BCNF)。
證明:設(shè)R為一個(gè)二目關(guān)系R(A1,A2),則屬性A1和A2之間可能存在以下幾種依賴(lài)關(guān)系:
A、A1àA2,但A2àA1,則關(guān)系R的碼為A1,決定因素都包含碼,所以,R是BCNF。
B、A1àA2,A2àA1,則關(guān)系R的碼為A2,所以決定因素都包含碼,R是BCNF。
包含碼。R是BCNF。C、R的碼為(A1,A2)(即A1 àA2,A2 àA1),決定因素都