Ⅰ 什麼是資料庫完整性,關系資料庫中完整性控制有幾個方面,分別通過什麼機制保證
關系的完整性約束通常包括域完整性,實體完整性、參照完整性和用戶定義完整性。
1、域完整性是保證資料庫欄位取值的合理性,是最簡單、最基本的約束。在當今的關系DBMS中,一般都有域完整性約束檢查功能。
2、實體完整性,作用是指在傳輸、存儲信息或數據的過程中,確保信息或數據不被未授權的篡改或在篡改後能夠被迅速發現。按實體完整性規則要求,主屬性不得取空值,如主關鍵字是多個屬性的組合,則所有主屬性均不得取空值。
3、參照完整性,作用是定義建立關系之間聯系的主關鍵字與外部關鍵字引用的約束條件。關系資料庫中通常都包含多個存在相互聯系的關系,關系與關系之間的聯系是通過公共屬性來實現的。根據實體完整性要求,主關鍵字不得取空值。
4、用戶定義完整性作用是根據應用環境的要求和實際的需要,對某一具體應用所涉及的數據提出約束性條件。這一約束機制一般不應由應用程序提供,而應有由關系模型提供定義並檢驗,用戶定義完整性主要包括欄位有效性約束和記錄有效性。
Ⅱ 資料庫的( )是指數據的正確性和相容性
資料庫的( 完整性)是指數據的正確性和相容性。
資料庫完整性定義:
資料庫完整性(Database Integrity)是指資料庫中數據在邏輯上的一致性、正確性、有效性和相容性。
原理:
資料庫完整性對於資料庫應用系統非常關鍵,其作用主要體現在以下幾個方面:
1.資料庫完整性約束能夠防止合法用戶使用資料庫時向資料庫中添加不合語義的數據。
2.利用基於DBMS的完整性控制機制來實現業務規則,易於定義,容易理解,而且可以降低應用程序的復雜性,提高應用程序的運行效率。同時,基於DBMS的完整性控制機制是集中管理的,因此比應用程序更容易實現資料庫的完整性。
3.合理的資料庫完整性設計,能夠同時兼顧資料庫的完整性和系統的效能。比如裝載大量數據時,只要在裝載之前臨時使基於DBMS的資料庫完整性約束失效,此後再使其生效,就能保證既不影響數據裝載的效率又能保證資料庫的完整性。
4.在應用軟體的功能測試中,完善的資料庫完整性有助於盡早發現應用軟體的錯誤。
資料庫完整性約束可分為6類:列級靜態約束、元組級靜態約束、關系級靜態約束、列級動態約束、元組級動態約束、關系級動態約束。動態約束通常由應用軟體來實現。不同DBMS支持的資料庫完整性基本相同。
Ⅲ 資料庫中 什麼是數據完整性
3.1 SQL 中的完整性約束
SQL把各種完整性約束作為資料庫模式定義的一部分。既有效防止了對資料庫的意外破壞,提高了完整性檢測的效率,又可以減輕編程人員的負擔。
SQL對三種不同完整性約束的設置及檢測,採取了不同的方式加以實現。下面分別介紹。
3.1.1 實體完整性和主碼
實體完整性規定,主碼的任何屬性都不能為空,因為,概念模型中實體和聯系都是可區分的,而且它們以碼為唯一性標識。如果,主碼的屬性值可以為空,則意味著在概念模型中存在著不以碼為唯一性標識的實體。這顯然是前後矛盾的。
那麼怎樣保證實體完整性呢?SQL中實體完整性是通過主碼來實現的。一旦某個屬性或屬性組被定義為主碼,該主碼的每個屬性就不能為空值,並且在關系中不能出現主碼值完全相同的兩個元組。
主碼的定義是在Create Table 語句中使用 Primary Key關鍵字來實現的。方法有兩種:
a) 在屬性定義後加上關鍵字 Primary Key;
b) 在屬性表定義後加上額外的定義主碼的子句:Primary Key(<主碼屬性名表>)
說明:
�0�5 如果主碼僅由一個屬性組成,上述兩種方法都可定義,若由兩個或以上的屬性組成,則只能用上述第二種方法定義了。
�0�5 對於候選碼的說明方法,可以用Unique說明該屬性的值不能重復出現。Unique的使用與Primary Key相似。
�0�5 一個表中只能有一個主碼定義,但可以有多個Unique說明。
�0�5 SQL中,並沒有強制為每個關系指定主碼,但為每個關系指定主碼通常會更好一些。(因為主碼的指定可以確保關系的實體完整性)
3.1.2 參照完整性約束與外部碼
參照完整性是對關系間引用數據的一種限制。即:若屬性組A是基本關系R1的外碼,它與基本關系R2的主碼K相對應,則R1中每個元組在A上的值必須:要麼取空值,要麼等於R2中某元組的主碼值。
一、外部碼約束的說明:
SQL中就是利用外部碼的說明來實現參照完整性約束,限製表中某些屬性的取值的。外部碼的說明也有兩種方法:
1、在該屬性的說明後直接加上關鍵字」REFERENCES <表名>(<屬性名>)」,其中表名稱為參照關系名,屬性名稱為參照關系的主碼。
2、在Create Table 語句的屬性清單後,加上外部碼說明子句,格式為:
FOREIGN KEY <屬性名表1> REFERENCES <表名>(<屬性名表2>)
上式中的屬性名表1和屬性名表2中屬性可以多於一個,但必須前後對應。
二、參照完整性約束的實現策略
前面講了,外部碼的取值只有兩種情況:要麼取空,要麼取參照關系中的主碼值。可是當用戶操作違反了這個規則時,如何保持此約束呢?
SQL提供了三種可選方案:
1、RESTRICT(限制策略):
當用戶對表進行違反了上述完整性約束、條件的插入、刪除或修改操作時,將會被系統拒絕。
2、CASCADE(級聯策略):
當對參照關系進行刪除和修改時,SQL所提供的一種方案。在這種策略下,當刪除或修改參照關系中某元組的主碼值時,被參照關系中,那些外部碼具有該值的元組也將被刪除或修改,以保證參照完整性。
3、SET NULL(置空策略):
置空策略也是針對參照關系的刪除或修改操作的。在這種策略下,當刪除參照關系中的某一元組或修改某一元組的主碼值時,被參照關系中外碼值等於該主碼值的元組在該外碼上的值將被置空
說明:
當用戶不指定參照完整性的實現策略時,一般被默認為RESTRICT(限制策略)。實現策略的說明通常被加在外部碼的說明後面,格式為:ON DELETE SET NULL ON UPDATE CASCADE。
3.1.3 用戶自定義完整性約束
對於用戶自定義完整性約束,SQL提供了非空約束、對屬性的CHECK約束、對元組的CHECK約束、觸發器等來實現用戶的各種完整性要求。
1、非空約束:
在CRETE TABLE 中的屬性定義後面加上NOT NULL關鍵字即定義了該屬性不能取空值。
2、基於屬性的CHECK約束
使用CHECK(檢查)子句可保證屬性值滿足某些前提條件。其一般格式為:
CHECK(<條件>)
它既可跟在屬性定義的後面,也可在定義語句中另增一子句加以說明。
如:CHECK(age>=18 AND age<=65);
CHECK(sex IN (「男」,」女」));
CHECK(dno IN(select dno from department));
從上例中可以看出,CHECK子句的條件中還可以帶子查詢。
3、基於元組的CHECK約束
基於元組的CHECK約束往往要涉及到表中的多個域。所以它是元組約束。在對整個元組完成插入或對某一元組的修改完成之後,系統將自動檢查是否符合CHECK條件表達式。若不符合條件,系統將拒絕該插入或修改操作。
基於元組CHECK約束的說明方法是在CREATE TABLE語句中的屬性表、主碼、外部碼的說明之後加上CHECK子句。
3.1.4 約束的更新
約束與資料庫中的表和視圖一樣,可以進行增、刪、改的更新操作。為了改和刪約束,需要在定義約束時對其進行命名,在各種約束的說明前加上關鍵字CONSTRAINT 和該約束的名稱即可。
例如:在employee表的create table語句中:
eno char(4) CONSTRAINT PK_employee PRIMARY KEY,
dno char(4)CONSTRAINT FK_employee FOREIGN KEY REFERENCES department(dno);
當對各種約束進行命名後,就可以用ALTER TABLE語句來更新與屬性或表有關的各種約束。如:
ALTER TABLE employee DROP CONSTRAINT FK_employee;
ALER TABLE Salary ADD CONSTRAINT RightSalary CHECK(Insure+Fund<Rest);
上述的增加約束,實際上也是通過ALTER TABLE語句定義約束的一種形式。
SQL不能直接修改約束,修改某一個約束實際上是用ALTER TABLE 語句先刪除該約束,然後再增加一個與該約束同名的新約束。
Ⅳ 問題:什麼是資料庫的完整性
答:資料庫的完整性是指數據的正確性和相容性。 問題:資料庫的完整性概念與資料庫的安全性概念有什麼區別和聯系?答: 資料庫的完整性是指數據的正確性和相容性、資料庫的安全性是指保護資料庫.以防止不合法的使用造成的數據泄密、更改或破壞。其相同點是兩者都是對資料庫中的數據進行控制.各自所實現的功能目標不同。問題:什麼是資料庫的完整性約束條件?可分為哪幾類?答: 數據完整性約束是為了保證進入資料庫中的數據的有效性而定義的數據規則、它可以分為以下兩類. ①針對不同的對象可以分為表級約束、元塑級約束和屬性級約束(也稱列約束);表級約束是若干元組間、關系中及關系之間的約束:元組級約束則是元組中的欄位組和欄位間聯系的約束;屬性級約束主要是針對列的類型、取值范圍、精度、排序等而制定的約束條件。②針對數據對象的狀態可以分為靜態約束和動態約束:靜態約束是指資料庫每一確定狀態時的數據對象所應滿足的約束條件.它是反映資料庫狀態穩定時的約束.動態約束是指資料庫從一種狀態轉變為另一種狀態時.新、舊值之間所應滿足的約束條件.它是反映資料庫狀態變遷的約束。 問題: DBMS的完整性控制應具有哪些功能? 答;①定義和存儲完整性功能.②檢查完整性功能;③控制完整性功能。 問題:RDBMS在實現參照完整性時需要考慮哪些方面?答: ①外碼能夠接受空值的問題. ②在被參照關系中刪除元組時.採用級聯刪除、受限刪除或置生值刪除的方法處理參照關系; ③在參照關系中插入元組時.可以使用受限插入、遞歸插入兩種方法處理參照關系. ④修改關系的主碼時 可以採用不允許修改主碼、或允許修改關系主碼.但必須保證主碼的惟一性和非空性方法處理參照關系; ⑤修改被參照關系時,可以採用級聯修改、拒絕修改和置空值修改方法處理參照關系。問題:假設有下面兩個關系模式: 職工(職工號,姓名,年齡,職務,工資,部門號),其中職工號為主碼; 部門(部門號,名稱,經理名,電話),其中部門號為主碼.用SQL語言定義這兩個關系模式.要求在模式中完成以下完整性約束條件的定義: 1)定義每個模式的主碼。 2)定義參照完整性。3)定義職工年齡不得超過60歲。 答: CREATE TABLE職工(職工號 CHAR(5)PRIMARY KEY, 姓名CHAR(8)NOT NULL, 年齡SMALLINT. 職務CHAR(10), 工資DECIMAL(7,2), 部門號CHAR(5)。 CONSTRAINT CI CHECK(年齡 <60). CONSTRAIN C2 FOREIGN KEY(部門號) REFEENCES部門(部門號)); CREAT TABLE部門(部門號CHAR(5)PRIMARY KEY. 名稱CHAR(l). 經理名 CHAR(8). 電話 CHAR(8). CONSTRAINT C3 FOREIGN KEY(經理名) REFERECES職工(姓名));問題:在資料庫中為什麼要並發控制?答; 資料庫的井發控制就是為了控制資料庫,防止多用戶並發使用資料庫時造成數據錯誤和程序運行錯誤,保證數據的完整性。問題:並發操作可能會產生哪幾類數據不一致?用什麼方法能避免這些不一致的情況?答. 井發操作可能會產生丟失修改、不可重復讀和讀「臟」數據的數據不一致問題。用封鎖的方法能避免這些不一致的情況。問題:什麼是封鎖?答. 封鎖是使事務對它要操作的數據有一定的控制能力。封鎖具有三個環節.第一個環節是申請加鎖.第二個環節是獲得鎖;第三個環節是釋放鎖。問題:基本的封鎖類型有幾種?試述它們的含義。 答. 基本的封鎖類型有兩種:排它鎖(簡稱X鎖)和共享鎖(簡稱S鎖)。 排它鎖也稱為獨占或寫鎖、一旦事務T對數據對象A加上排它鎖.則只允許T讀取和修改A.其他任何事務既不能讀取和修改A,也不能再對A加任何類型的鎖 直到T釋放A上的鎖為止。 共享鎖又稱讀鎖、如果事務T對數據對象A加上共享鎖,其他事務只能再對A加S鎖,不能加X鎖,知道事務T釋放A上的S鎖為止。問題:如何用封鎖機制保證數據的一致性?答: 封鎖機製作為井發控制的重要手段.利用封鎖的特性和封鎖協議,它在井發操作保證事務的隔離性.用正確的方式調度並發操作.是一個用戶事務的執行不受其他事務的干擾.從而避免造成數據的不一致性。問題:什麼是封鎖協議?不同級別的封鎖協議的主要區別是什麼? 答. 在對數據對象加鎖時,還需要約定一些規則 這些規則稱為封鎖協議。 一級封鎖協議:是事務T在修改數據之前必須先對其加X鎖.直到事務結束才釋放。一級封鎖協議可有效地防止丟失修改並能夠保證事務T的可恢復性、一級封鎖由於沒有對數據進行加鎖,所以不能保證可重復讀和不讀「贓」數據。 二級封鎖協議;是事務T對要修改的數據必須先加X鎖.直到事務結束才釋放X鎖;要讀取的數據必須先加S鎖.讀完後即可釋放S鎖。M級封鎖協議不但能夠防止丟失修改,還可進一步防止讀「臟」數據。 三級封鎖協議:是事務T在讀取數據之前必須先對其加S鎖.在要修改數據之前必須先對其加X鎖.直到事務結束後才釋放所有鎖、由於三級封鎖協議強調即使事務讀完數據A之後也不釋放S鎖 從而使得別的事務無法更改數據A、三級封鎖協議不但防止了丟失修改和不讀「臟」數據,而且防止了不可重復的隊問題:不同封鎖協議與系統一致性級別的關系是什麼?答: 一級封鎖協議可有效地防止丟失修改,並能夠保證事務T的可恢復性。一級封鎖由於沒有對數據進行加鎖,所以不能保證可重復讀和不讀「臟』數據。 二級封鎖協議不但能夠防止丟失修改.還可進一步防u讀「臟」數據。 由於三級封鎖協議強調即使事務讀完數據A之後也不釋放S鎖,從而使別的事務無法更改數據A。三級封鎖協議不但防止了丟失修改和不讀「勝數據.而且防u了不可重復讀。問題:什麼是活鎖?什麼是死鎖?答; 在多個事務請求對同一數據封鎖時,總是使某一用戶等待的情況稱為活鎖;多事務交錯等待的僵持局面稱為死鎖。問題:試述活鎖的產生原因和解決方法。答; 活鎖是封鎖的無序造成的、解決方法是採用先來先服務的方法,即對要求封鎖數據的事務排隊.使前面的事務先獲得數據的封鎖權。問題:請給出預防死鎖的若干方法。 答: 預防死鎖通常有以下兩種方法; ①一次封鎖法.就是要求每個事務必須一次將所有要使用的數據全部加鎖.否則該事務不能繼續執行. ②順序封鎖法.是預先對數據對象規定一個封鎖順序.所有事務都按這個順序實行封鎖。問題:請給出檢測死鎖發生的一種方法,當發生死鎖後如何解除死鎖?答: 檢測死鎖發生的一種方法是選擇一個處理死鎖代價最小的事務,將其撤銷,釋放此事務持有的所有鎖.使其他事務得以繼續運行下去。 解除死鎖問題有兩類方法:一類方法是採用一定措施來預防死鎖的發生.另一類方法是允許發生死鎖.然後採用一定手段定期診斷系統中有無死鎖.若有則解除之。問題:什麼樣的並發調度是正確的調度?答. 如果一個事務運行過程中沒有其他事務同時運行,即沒有受到其他事務的干擾,那麼就可以認為該事務的運行結果是正常的,可串列性是井發事務正確性的准則 為了保證並發操作的正確性.DBMS的並發控制機制必須提供一定的手段來保證調度是可串列化的。問題:試述兩段鎖協議的概念。 答: 所謂兩段鎖協議是指所有事務必須分兩個階段對數據項進行加鎖和解鎖. ①在對任何數據進行讀、寫操作之前.首先要申請並獲得對該數據的封鎖. ②在釋放一個封鎖之後,事務不再申請並獲得對該數據的封鎖。 即每個事務分成兩個階段,第一階段是申請和獲得封鎖,也稱為擴展階段。在這階段.事務可以申請獲得任何數據項上的任何類型的鎖,但是不能釋放任何鎖。第二階段是釋放到鎖.也稱為收縮階段。在這階段,事務可以釋放任何數據項上的任何類型的鎖。但是不能再申請任何鎖。問題:為什麼要引進意向鎖?意向鎖的含義是什麼?答: 事務 T要對關系 RI加 X鎖時,系統只需檢查根結點資料庫和關系 RI是否已加了不相容的鎖.而不再需要搜索和檢查RI中的每一個元組是否加了X鎖.對任一元組加鎖.必須先對它所在的關系加意向鎖。 意向鎖的含義是.如果對一個結點加意向鎖。則說明該給點的下層結點正在被加銷:對任何一結加鎖時.必須先對它的上層結點加意向鎖。問題:理解並解釋下列術語的含義:封鎖、活鎖、死鎖、排它鎖、共享鎖、並發事務的調度、可串列化的調度、兩段鎖協議。答: ①封鎖.封鎖是使事務對它要操作的數據有一定的控制能力。 ③活鎖:這種在多個事務請求對同一數據封鎖時.總是使某一用戶等待的情況稱為活鎖。 ③死鎖.這種多事務交錯等待的僵持局面稱為死鎖。 ④排它鎖.排名鎖也稱為獨占或寫鎖、一旦事務T對數據對象A加上排它鎖,則只允許T讀取和修改A.其他任何事務既不能讀取和修改A.也不能再對A加任何類型的鎖.直到T釋放A上的鎖為止。 ⑤共享鎖:共享鎖又稱讀鎖、如果事務T對數據對象A加上共享鎖.其他事務只能再對A加S鎖.不能加X鎖.知道事務T釋放A上的S鎖為上。 ③井發事務的調度.多個事務並發執行調度策略稱為並發事務的調度。 ①可串列化的調度:如果多個事務並發執行的結果與按串列執行的結果相同 這種調度策略稱為可串列化的調度。③兩段鎖協議.所謂兩段鎖協議是指所有事務必須分兩個階段對數據項進行加鎖和解鎖。 問題:什麼是資料庫的安全性?答.資料庫的安全性是指保護資料庫.以防止不合法的使用數據泄密、更改或破壞。 問題:資料庫安全性和計算機系統的安全性有什麼關系? 答: 資料庫安全性是計算機系統的安全性的一個部分.資料庫系統不僅要利用計算機系統的安全性保證自己系統的安全性.同時還會提供專門的手段和方法,使安全性能更好。例如在用戶要求進入計算機系統時.系統首先根據用戶輸入的用戶標識進行身份鑒定,只有合法的用戶才准許進入計算機系統:對已進入的用戶 ***S還要進行存取控制,只允許用戶執行合法操作:操作系統也會提供相應的保護措施;數據最後還可以以密碼形式存儲到資料庫中。 問題:試述實現資料庫安全性控制的常用方法和技術。答. ①用戶標識與鑒別:②存取控制:③自主存取控制方法.④強制存取控制方法:⑤視圖機制;③審計.o數據加密。 問題:SQL 語言中提供了哪些數據控制(自主存取控制)的語句?請試舉幾例說明它們的使用方法。答. ①GRANT(授權)語句 例:GRANT SELECTINSRRT ON學生 TO張勇 WITH GRANT OPTION; ②REVOKE(收回)語句 例:REVOKE INSERT ON學生 FROM張勇; 問題:今有兩個關系模式: 職工(職工號,姓名,年齡,職務,工資,部門號); 部門(部門號,名稱,經理名,地址,電話)。 請田SQL 的GRANT和REVOKE語句(加上視圖機制),完成以下授權定義或存取控制功能。 1)用戶王明對兩個表有SELECT權力。 2)用戶李勇對兩個表有INSERT和DELETE權力。 3)用戶劉星對職工表有SELECT權利,對工資欄位具有更新權力。 4)用戶張新具有修改這兩個表的結構的權力。 5)用戶周平具有對兩個表的所有權力(讀、插、改、刪數據),並具有給其他用戶授權的權利。
Ⅳ 什麼是資料庫的數據完整性有哪些數據完整性約束在access中如何實現
資料庫的數據完整性是一組完整性規則的集合。完整性規則是數據及其聯系所具有的制約和依存規則,用以保證數據的正確、有效和相容,使數據系統值和現實系統狀態一致。
完整性約束包括:實體完整性,參照完整性和用戶定義的完整性
實體完整性在Access中通過主鍵實現。參照完整性在Access中通過創建表間關系實現。用戶定義的完整性在Access中通過定義有效性規則實現。