1. 程式人生 > >第12講:數據庫完整性

第12講:數據庫完整性

關系 不能 目的 數據庫 關系模型 我們 完整性 表達 數據庫完整性

大綱:

  1. 數據庫完整性的概念及分類
  2. SQL語言實現靜態(列/關系)完整性
  3. SQL語言實現動態完整性

一、前言

1. 數據庫完整性是數據庫的一種特性(在任何情況下的正確性、有效性和一致性),其由DBMS保證實現

①廣義完整性:語義完整性、並發控制、安全控制、故障恢復

②狹義完整性:特指語義完整性,DBMS通常有專門的完整性管理機制與程序來處理語義完整性問題

2. 回顧關系模型中的三個完整性:實體完整性、參照完整性、用戶自定義完整性

用戶自定義完整性即是上述語義完整性,而這也是我們這講的主題。

3. 本講目的:學會把完整性約束條件施加到數據庫的定義中,學會如何表達完整性約束條件。

二、數據庫完整性概述

1. 為什麽會引發數據庫完整性的問題?

  • 不正當的數據庫操作,如輸入錯誤、操作失誤、程序處理失誤等

2. 數據庫完整性管理的作用:

  • 防止和避免數據庫中不合理數據的出現
  • DBMS應盡可能地自動防止DB中的語義不合理現象

3. DBMS如何自動保證數據庫完整性?

  1. DBA定義完整性約束規則;
  2. 當用戶請求更新數據時,DBMS將依據完整性約束規則來檢查此更新是否符合規則,進而決定是否允許更新。

三、數據庫完整性的分類

1. 按約束對象分類

  • 域完整性約束條件:施加於某一列上,對給定列上所要更新的某一候選值是否可以接受進行約束條件判斷
  • 關系完整性約束條件:施加於關系(若幹列)上,對給定關系上所要更新的某一候選元組是否可以接受進行約束條件判斷;或是對一個關系中的若幹元組和另一個關系中的若幹元組間的聯系是否可以接受進行約束條件判斷

2. 按約束來源分類

  • 結構約束:來自於模型的約束,例如函數依賴約束、主鍵約束(實體完整性)、外鍵約束(參照完整性),只關心數值相等與否,是否允許空值等
  • 內容約束:來自於用戶的約束,如用戶自定義完整性,關心元組或屬性的取值範圍

3. 按約束狀態分類

  • 靜態約束:要求DB在任何時候均應滿足的約束,如Sage在任何時候均應滿足“大於0且小於150”
  • 動態約束:要求DB從一狀態變為另一狀態時應滿足的約束,例如人的身高只能增加,不能減少(不可從170更改為165)

四、 完整性約束條件

五、用SQL語言實現靜態完整性

第12講:數據庫完整性