數據庫系統概論習題集 第十章 數據庫完整性


一、選擇題

  1.完整性檢查和控制的防范對象( ),防止它們進入數據庫。安全性控制的防范對象是( ),防止他們對數據庫數據的存取。

  A. 不合語義的數據 B. 非法用戶

  C. 不正確的數據 D. 非法操作

  2.下述哪個是SQL語言中的數據控制命令( )。

  A. GRANT B. COMMIT

  C. UPDATE D. SELECT

  3.下述SQL語言中的權限,哪一個允許用戶定義新關系時,引用其他關系的主碼作為外碼( )。

  A. INSERT B. DELETE

  C. REFERENCES D. SELECT

    選擇題答案:

  (1) A C B D (2) A (3) C

    二、簡答題

  1.什么是數據庫的完整性?

  答:數據庫的完整性是指數據的正確性和相容性。

    2.數據庫的完整性概念與數據庫的安全性概念有什么區別和聯系?

  答:數據的完整性和安全性是兩個不同的概念,但是有一定的聯系。

  前者是為了防止數據庫中存在不符合語義的數據,防止錯誤信息的輸入和輸出,即所謂垃圾進垃圾出(Garbage In Garbage Out)所造成的無效操作和錯誤結果。

  后者是保護數據庫防止惡意的破壞和非法的存取。

  也就是說,安全性措施的防范對象是非法用戶和非法操作,完整性措施的防范對象是不合語義的數據。

    3.什么是數據庫的完整性約束條件?可分為哪幾類?

  答:完整性約束條件是指數據庫中的數據應該滿足的語義約束條件。

   一般可以分為六類:

  靜態列級約束、靜態元組約束、靜態關系約束、動態列級約束、動態元組約束、動態關系約束。

  靜態列級約束是對一個列的取值域的說明,包括以下幾方面:

   1. 對數據類型的約束,包括數據的類型、長度、單位、精度等

   2. 對數據格式的約束

   3. 對取值范圍或取值集合的約束。

   4. 對空值的約束

   5. 其他約束

  靜態元組約束就是規定組成一個元組的各個列之間的約束關系,靜態元組約束只局限在單個元組上。

  靜態關系約束是在一個關系的各個元組之間或者若干關系之間常常存在各種聯系或約束。常見的靜態關系約束有:

   1. 實體完整性約束。

   2. 參照完整性約束。

  3. 函數依賴約束。

  動態列級約束是修改列定義或列值時應滿足的約束條件,包括下面兩方面:

   1. 修改列定義時的約束

   2. 修改列值時的約束

  動態元組約束是指修改某個元組的值時需要參照其舊值,並且新舊值之間需要滿足某種約束條件。

  動態關系約束是加在關系變化前后狀態上的限制條件,例如事務一致性、原子性等約束條件。

  詳細內容可以參見《概論》10.1中的介紹。

    4.DBMS的完整性控制機制應具有哪些功能?

  答:DBMS的完整性控制機制應具有三個方面的功能:

  1). 定義功能,即提供定義完整性約束條件的機制。

   2. 檢查功能,即檢查用戶發出的操作請求是否違背了完整性約束條件。

  3). 違約反應:如果發現用戶的操作請求使數據違背了完整性約束條件,則采取一定的動作來保證數據的完整性。

    5.RDBMS在實現參照完整性時需要考慮哪些方面?

  答:

  RDBMS在實現參照完整性時需要考慮以下幾個方面:

   1) 外碼是否可以接受空值

   2) 刪除被參照關系的元組時的考慮,這時系統可能采取的作法有三種:

   (a)級聯刪除(CASCADES);

   (b)受限刪除(RESTRICTED);

   (c)置空值刪除(NULLIFIES)

   3) 在參照關系中插入元組時的問題,這時系統可能采取的作法有:

   (a)受限插入

   (b)遞歸插入

   4) 修改關系中主碼的問題

  一般是不能用UPDATE語句修改關系主碼的。如果需要修改主碼值,只能先刪除該元組,然后再把具有新主碼值的元組插入到關系中。

  如果允許修改主碼,首先要保證主碼的唯一性和非空,否則拒絕修改。然后要區分是參照關系還是被參照關系。

  詳細討論可以參見《概論》10.2。

    6. 假設有下面兩個關系模式:

   職工(職工號,姓名,年齡,職務,工資,部門號),其中職工號為主碼;

   部門(部門號,名稱,經理名,電話),其中部門號為主碼;

  用SQL語言定義這兩個關系模式,要求在模式中完成以下完整性約束條件的定義:

  定義每個模式的主碼;定義參照完整性;定義職工年齡不得超過60歲。

  答

   CREATE TABLE DEPT

   (Deptno NUMBER(2),

   Deptname VARCHAR(10),

   Manager VARCHAR(10),

   PhoneNumber Char(12)

   CONSTRAINT PK_SC PRIMARY KEY (Deptno));

   CREATE TABLE EMP

   (Empno NUMBER(4),

   Ename VARCHAR(10),

   Age NUMBER(2),

   CONSTRAINT C1 CHECK (Age《=60),

   Job VARCHAR(9),

   Sal NUMBER(7,2),

   Deptno NUMBER(2),

   CONSTRAINT FK_DEPTNO

   FOREIGN KEY (Deptno)

   REFERENCES DEPT(Deptno));

    7.關系系統中,當操作違反實體完整性、參照完整性和用戶定義的完整性約束條件時,一般是如何分別進行處理的?

  答:

  對於違反實體完整性和用戶定義的完整性的操作一般都采用拒絕執行的方式進行處理。而對於違反參照完整性的操作,並不都是簡單地拒絕執行,有時要根據應用語義執行一些附加的操作,以保證數據庫的正確性。具體的處理可以參見上面第5題或《概論》10.2中相應部分。

  *8. 試述你了解的某一個實際的DBMS產品的完整性控制策略。

  答:

  不同的DBMS產品以及同一產品的不同版本的完整性控制策略各不相同,讀者要去了解某一個DBMS產品的完整性控制策略。

  《概論》上10.3 簡單介紹了有關ORACLE數據庫的完整性控制策略。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM