數據庫概論 (四)完整性

完整性

完整性與安全性的異同點

完整性:防止數據庫中存在不符合語義的數據,也就是防止數據庫中存在不正確的數據。防範對象:不合語義的、不正確的數據。
安全性:保護數據庫防止惡意的破壞和非法的存取。防範對象:非法用戶和非法操做。sql

實體完整性規則

若屬性(一個或者一組)A是基本關係的主屬性,則A不能取空值。在關係型數據庫裏的體現就是將數據表的某一個候選碼設定爲主鍵,PRIMARY KEY.數據庫

單屬性構成碼有兩種方式:安全

  • 成爲列級約束條件
  • 成爲表級約束條件

約束條件的範圍由碼的定義位置肯定,若是在建立表的最後肯定那麼就是表級約束條件,若是在定義列的同時設定爲碼那麼就是列級。code

而對於多個屬性一塊兒構成碼的,只能做爲表級的約束條件。對象

實體完整性的檢查和違約處理

插入或對主碼列進行更新操做時,DBMS按照實體完整性規則自動進行檢查。包括:blog

  1. 檢查主碼的各個屬性是否爲空,只要有一個爲空就拒絕插入或修改;
  2. 檢查主碼值是否惟一,若是不惟一則拒絕插入或修改

檢查主碼是否惟一的一種辦法就是全表掃描,並一一比較是否相同。索引

或者爲主碼建立索引,提升掃描的效率。table

參照完整性

指的是關係模型中參照其餘的表的屬性,構成了當前表的參照完整性。在關係數據庫中的體現就是將某一個屬性定義爲外鍵 FOREIGN KEY ... REFERENCE...class

參照完整性的檢查和違約處理

  1. 拒絕(NO ACTION)執行
    默認策略
  2. 級聯(CASCADE)操做
    如從Student表中刪除Sno的值爲201215121,則從sc表中級連刪除 SC.Sno=201215121的全部元組
  3. 設置爲空值(SET-NULL)
    對於參照完整性,除了應該定義外碼,還應定義外碼列是否容許空值,如:學生 (學號, 姓名, 年齡,專業號 ) 專業(專業號, 專業名)
    若是專業表中某個元組被刪除,則能夠把學生中的外碼設置爲空值

image-20210105160245864

用戶自定義完整性

針對用戶的特定應用而設定的完整性要求。例如性別只能爲男,女,年齡必須爲正數等。效率

用戶定義的完整性分爲

  • 屬性上的完整性定義
    • 列值惟一
    • 列值不爲NULL
    • 用CHECK短語指定列值應該知足的條件
  • 元組上的完整性定義
    • 在CREATE TABLE時能夠用CHECK短語定義元組上的約束條件,即元組級的限制
    • 同屬性值限制相比,元組級的限制能夠設置不一樣屬性之間的取值的相互約束條件,便可以在同一個元組內進行不一樣屬性的判斷處理。

完整性約束命名子句

QL還在Creat table語句中提供了完整性約束命名子句,用來對完整性約束條件命名,從而能夠靈活地增長、刪除一個完整性約束條件

CONSTRAINT <完整性約束條件名>[ NOT NULL  | UNIQUE | PRIMARY KEY短語| FOREIGN KEY短語 | CHECK短語  ]

斷言

斷言建立語句

CREATE ASSERTION  <斷言名> <CHECK 子句>

能夠定義涉及到多個表的複雜條件判斷語句,數據庫中全部涉及到斷言中定義的操做都會觸發斷言判斷。若是斷言判斷結果不爲真,就會拒絕執行。

觸發器

在指定的操做以前,或以後執行的一段SQL語句。

  • Before insert, update...
  • After insert, update...

數據庫的完整性是爲了保證數據庫中存儲的數據是正確的DBMS完整性實現的機制。

  • 完整性約束定義機制
  • 完整性檢查機制
  • 違背完整性約束條件時RDBMS應採起的動做
相關文章
相關標籤/搜索