資料庫完整性

2021-08-20 05:26:58 字數 2967 閱讀 8754

資料的完整性和安全性

資料庫的完整性和安全性是兩個既有聯絡又不盡相同的概念。資料的完整性是為了防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料。資料的安全性是保護資料庫防止惡意破壞和非法訪問。

完整性檢查和控制的防範物件是不合語義的、不正確的資料,防止它們進入資料庫。安全性控制的方法物件是非法使用者和非法操作,防止它們對資料庫的非法訪問。

資料庫的完整性是指資料的正確性和相容性。資料的正確性是指資料是符合現實世界語義、反映當前實際狀況的;資料的相容性是指資料庫同一物件再不同關係表中的資料是符合邏輯的。

1、提供定義完整性約束條件的機制

完整性約束條件也稱為完整性規則,是資料庫中的資料必須滿足的語義約束條件。它表達了給定的資料模型中資料及其聯絡所具有的制約和依存規則,用以限定符合資料模型的資料庫狀態以及狀態的變化,以保證資料的爭取、有效和相容。sql標準使用了一系列概念來描述完整性,包括關係模型的實體完整性、參照完整性和使用者定義完整性。這些完整性一般由sql的資料定義語言語句來實現,它們作為資料庫模式的一部分存入資料字典中。

2、提供完整性檢查的方法

資料庫管理系統中檢查資料是否滿足完整性約束條件的機制稱為完整性檢查。一般在insert、update、delete語句執行後開始檢查,也可以在事務提交時檢查。檢查這些操作執行後資料庫中的資料是否違背了完整性約束條件。

3、進行違約處理

資料庫管理系統若發現使用者的操作違背了完整性約束條件將採取一定的動作。關聯式資料庫管理系統使得完整性控制成為其核心支援的功能,從而能夠為所有使用者和應用提供一致性的資料庫完整性。

1、定義實體完整性

關係模型的實體完整性在create table中用primary key定義。對單屬性構成的碼有兩種說明方法:定義為列級約束條件和定義為表級約束條件。對多個屬性構成的碼只有一種說明方法,即定義為表級約束條件。

備註:實際上就是定義乙個主鍵,並且只能在表級定義主碼。

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

用prmary key短語定義了關係的主碼後,每當使用者程式對基本表的插入一條記錄或對主碼列進行更新操作時,關聯式資料庫管理系統將按照實體完整性規則自動進行檢查。

1)檢查主碼是否唯一,不唯一則拒絕插入或修改。

2)檢查主碼的各個屬性是否為空,只要有乙個為空就拒絕插入或修改。

檢查記錄主碼值是否唯一的一種方法是進行全表掃瞄,依次判斷表中每一條記錄的主碼值與將插入記錄的主碼值(或修改的新主碼值)是否相同。這種方法比較耗時。另一種就是在主碼上自動建立乙個索引,通過索引進行判斷是否存在。這樣可以大大提高效率。

1、定義參照完整性

關係模型的參照完整性在create table中foreign key短語定義哪些列為外碼,用references短語指明這些外碼參照哪些表的主碼。

備註:相當於外來鍵。

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

參照完整性將兩個表中的相應元組聯絡起來了。因此,對被參照表和參照表進行增刪改操作時有可能破壞參照完整性,必須進行檢查以保證這兩個表的相容性。

可能出現的情況和處理

處理策略:

1. 拒絕(no action)執行:不允許該操作執行,該策略一般設定為預設策略。

2. 級聯(cascade)操作:當刪除或修改被參照表的乙個元組導致與參照表的不一致時,刪除或修改參照表中的所有導致不一致的元組。

3. 設定為空值:當刪除或修改被參照表的乙個元組造成了不一致,則將參照表中的所有造成不一致的元組的對應屬性設定為空值。

關係資料庫系統在實現參照完整性時,除了要提供定義主碼、外碼的機制外,還需要提供不同的策略供使用者選擇。

使用者定義的完整性就是針對某一具體應用的資料必須滿足的語義要求。

1、屬性上的約束條件

屬性上約束條件的定義

在create table中定義屬性的同時,可以根據應用要求定義屬性上的約束條件(屬性值限制),包括

1)列值非空(not null)

2)列值唯一(unique)

3)檢查列值是否滿足乙個條件表示式(check語句)

屬性上約束條件的檢查和違約處理

當表中插入元組或修改屬性的值時,關聯式資料庫管理系統將檢查屬性上的約束條件是否被滿足,不滿足則被拒絕執行。

2、 元組上的約束條件

元組上約束條件的定義

與屬性上約束條件的定義類似,在create table語句中可以用check短語定義元組上的約束條件,即元組級的限制。同屬性值限制相比,元組級的限制可以設定不同屬性之間的取值的相互約束條件。

元組上約束條件的檢查和違約處理

當往表中插入元組或修改屬性的值時,關聯式資料庫管理系統將檢查元組上的約束條件是否被滿足,如果不滿足就拒絕執行操作。

完整性機制的實施會影響系統效能,因此許多資料庫管理系統對完整性機制的支援比對安全性的支援要晚得多,也弱得多。對於違反完整性的操作一般採用拒絕執行的方法。使用者要根據應用語義來定義合適的處理策略,以保證資料庫的正確性。

sql在create table語句中提供了完整性約束命名子句constraint,用來對完整性約束條件命名,從而可以靈活地增加、刪除乙個完整性約束條件。

1、完整性約束命名子句

constraint 《完整性約束條件名》《完整性約束條件》

《完整性約束條件》包括not null、unique、primary key、foreign key、check短語等。

2、修改表中的完整性限制

使用alter table語句修改表中的完整性限制。

域是一組具有相同資料型別的值的集合。create domain語句可以建立乙個域以及該域應滿足的完整性約束條件,然後就可以用域來定義屬性。這樣資料庫中不同的屬性可以來自同乙個域,當域上的完整性約束條件改變時只要修改域的定義就可以了,不用一一修改域上的各個屬性。

資料庫完整性

完整性約束條件 實體完整性給出了主鍵的取值的最低約束條件 規則是 主鍵的各個屬性都不能為空。參照完整性給出了在關係之間建立正確的聯絡的約束條件 規則是 外來鍵或者取空值 此時要求外來鍵的各個屬性均為空值 或者等於被參照關係中的主鍵的某個值。使用者自定義完整性 關係數控應用系統中的關係往往還應該滿足一...

資料庫 完整性

一 實驗目的 1 掌握資料庫約束的概念 2 熟悉sql server 的完整性約束技術。3 了解sql server 的違反完整性處理措施。二 實驗環境 sql server2014 三 實驗內容 1.在前幾次實驗所使用的資料庫中新建乙個教師資訊表,表名為teacher,字段包括tno 教師編號 t...

資料庫完整性

b 更新丟失 b 當有兩個寫程序同時修改相同的資料時,往往會出現乙個寫程序做的修改覆蓋了另乙個寫程序的修改。這種情況是完整性問題最常見的型別。互斥鎖的設計就是防範這種問題的出現。b 髒讀 b 乙個事務修改的資料在提交前被另乙個事務讀取,就會發生髒讀。由於事務提交的修改有可能會被回滾,因而其他事務讀取...