『壹』 資料庫的完整性包含哪些完整性約束
數據完整性約束指的是為了防止不符合規范的數據進入資料庫,在用戶對數據進行插入、修改、刪除等操作時,DBMS自動按照一定的約束條件對數據進行監測,使不符合規范的數據不能進入資料庫,以確保資料庫中存儲的數據正確、有效、相容。
資料庫的完整性約束包含以下類型:
1) 與表有關的約束:是表中定義的一種約束。可在列定義時定義該約束,此時稱為列約束,也可以在表定義時定義約束,此時稱為表約束。
2) 域(Domain)約束:在域定義中被定義的一種約束,它與在特定域中定義的任何列都有關系。
3) 斷言(Assertion):在斷言定義時定義的一種約束,它可以與一個或多個表進行關聯。
(1)資料庫完整性的局限擴展閱讀:
數據的完整性
分為以下四類:
1) 實體完整性:規定表的每一行在表中是惟一的實體。
2) 域完整性:是指表中的列必須滿足某種特定的數據類型約束,其中約束又包括取值范圍、精度等規定。
3) 參照完整性:是指兩個表的主關鍵字和外關鍵字的數據應一致,保證了表之間的數據的一致性,防止了數據丟失或無意義的數據在資料庫中擴散。
4) 用戶定義的完整性:不同的關系資料庫系統根據其應用環境的不同,往往還需要一些特殊的約束條件。用戶定義的完整性即是針對某個特定關系資料庫的約束條件,它反映某一具體應用必須滿足的語義要求。
『貳』 資料庫中 什麼是數據完整性
資料庫中的數據是從外界輸入的,而數據的輸入由於種種原因,會發生輸入無效或錯誤信息。保證輸入的數據符合規定,成為了資料庫系統,尤其是多用戶的關系資料庫系統首要關注的問題。數據完整性因此而提出。本章將講述數據完整性的概念及其在SQL Server 中的實現方法。
數據完整性(Data Integrity)是指數據的精確性(Accuracy) 和可靠性(Reliability)。它是應防止資料庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。
資料庫採用多種方法來保證數據完整性,包括外鍵、約束、規則和觸發器。系統很好地處理了這四者的關系,並針對不同的具體情況用不同的方法進行,相互交叉使用,相補缺點。
(2)資料庫完整性的局限擴展閱讀:
數據完整性分為以下3類:
1、域完整性:
是指一個列的輸入有效性,是否允許為空值。強制域完整性的方法有:限制類型(通過設定列的數據類型)、格式(通過CHECK約束和規則)或可能值的范圍(通過FOREIGN KEY約束、CHECK約束、DEFAULT定義、NOT NULL定義和規則)。
2、實體完整性:
是指保證表中所有的行唯一。實體完整性要求表中的所有行都有一個唯一標識符。這個唯一標識符可能是一列,也可能是幾列的組合,稱為主鍵。
3、參照完整性:
是指保證主關鍵字(被引用表)和外部關鍵字(引用表)之間的參照關系。它涉及兩個或兩個以上表數據的一致性維護。外鍵值將引用表中包含此外鍵的記錄和被引用表中主鍵與外鍵相匹配的記錄關聯起來。
『叄』 資料庫與數據倉庫的本質區別是什麼
1、存放值區別:
資料庫只存放在當前值,數據倉庫存放歷史值;
2、數據變化區別:
資料庫內數據是動態變化的,只要有業務發生,數據就會被更新,而數據倉庫則是靜態的歷史數據,只能定期添加、刷新;
3、數據結構區別:
資料庫中的數據結構比較復雜,有各種結構以適合業務處理系統的需要,而數據倉庫中的數據結構則相對簡單;
4、訪問頻率不同:
資料庫中數據訪問頻率較高,但訪問量較少,而數據倉庫的訪問頻率低但訪問量卻很高;
5、目標人群區別:
資料庫中數據的目標是面向業務處理人員的,為業務處理人員提供信息處理的支持,而數據倉庫則是面向高層管理人員的,為其提供決策支持;
『肆』 資料庫系統的安全性和完整性有什麼區別和聯系
一、不同點
1、內容不同
資料庫完整性是指數據的正確性和相容性。
資料庫安全性是指保護資料庫,以防止不合法的使用造成的數據泄密、更改或破壞。
2、對象不同
資料庫安全性的防範對象是非法的操作和未授權的用戶。
資料庫完整性的防範對象是不符合語義的數據。
二、相同點是兩者都是對資料庫中的數據進行控制,各自所實現的功能目標不同。
(4)資料庫完整性的局限擴展閱讀
資料庫系統安全主要利用在系統級控制資料庫的存取和使用的機制,包含:
(1) 系統的安全設置及管理,包括法律法規、政策制度、實體安全等;
(2) 資料庫的訪問控制和許可權管理;
(3) 用戶的資源限制,包括訪問、使用、存取、維護與管理等;
(4) 系統運行安全及用戶可執行的系統操作;
(5) 資料庫審計有效性;
(6) 用戶對象可用的磁碟空間及數量。
『伍』 關系型資料庫的局限性有哪些
關系型資料庫的局限性如下:
1、無法引用對象。
在關系型資料庫中,通過SQL語言或視圖可以表達屬性值為對象的這個意思。但資料庫本身並不能表達出來,需要人為設定,如果資料庫設計者忘記了當初的設定,那資料庫里的內容就失去含義了。我們需要的是一個本身能進行更復雜表達的數據組織方法。
如果是在編程語言中,一個對象可以將其地址賦給變數,能夠直接描述對象與對象的關系。
2、相對固定的關系。
作為實體,可以設置不同的二維表結構,可以存放各種各樣的實體,但關系的表達取決於設計者的認識。也就是說,是人為設定的關系。
關系資料庫需要SQL或視圖(本質也是SQL)來定義和描述關系,不能隨需要變化。
3、相對固定的概念分類。
當變化發生時,資料庫的一部分就只能重新設計,一個表需要拆分為兩個表。這種變動會導致一系列的變化,程序、界面、文檔、教程。
關系資料庫對世界認知的相對固定性與世界的動態性有些不合時宜。如此說來,以JavaScript為代表的動態腳本語言就解決了這一問題,可以隨著世界的變化隨意定義屬性。
(5)資料庫完整性的局限擴展閱讀:
關系型資料庫和非關系型資料庫的區別:
1、數據存儲方式不同。
關系型和非關系型資料庫的主要差異是數據存儲的方式。關系型數據天然就是表格式的,因此存儲在數據表的行和列中。
與其相反,非關系型數據不適合存儲在數據表的行和列中,而是大塊組合在一起。非關系型數據通常存儲在數據集中,就像文檔、鍵值對或者圖結構。
2、擴展方式不同。
要支持更多並發量,SQL資料庫是縱向擴展,也就是說提高處理能力,使用速度更快速的計算機,這樣處理相同的數據集就更快了。
雖然SQL資料庫有很大擴展空間,但最終肯定會達到縱向擴展的上限。而NoSQL資料庫是橫向擴展的。非關系型數據存儲天然就是分布式的,NoSQL資料庫的擴展可以通過給資源池添加更多普通的資料庫伺服器(節點)來分擔負載。
3、對事務性的支持不同。
SQL資料庫支持對事務原子性細粒度控制,並且易於回滾事務。
雖然NoSQL資料庫也可以使用事務操作,但穩定性方面沒法和關系型資料庫比較,所以其價值是在操作的擴展性和大數據量處理方面。
『陸』 什麼是資料庫的完整性約束條件
資料庫完整性(Database Integrity)是指資料庫中數據的正確性和相容性,其目的是防止垃圾數據的進出。資料庫完整性由各種各樣的完整性約束來保證,因此可以說資料庫完整性設計就是資料庫完整性約束的設計。加在資料庫之上的語義約束條件就是資料庫完整性約束條件。
完整性約束條件作用對象可以使關系、元組、列三種。
●列約束主要是列的數據類型、取值范圍、精度、排序等約束條件。
●元組的約束是元組中各個欄位間的聯系的約束。
●關系的約束是若干元組間、關系集合上以及關系之間的聯系的約束。
完整性約束條件涉及這三類對象,其狀態可以是靜態的,也可以是動態的。所謂靜態約束是指資料庫每一確定狀態時的數據對象所應滿足的約束條件。它是反映資料庫狀態合理性的約束,這是最重要的一類完整性約束。
動態約束是指資料庫從一種狀態轉變為另一種狀態時,新、舊值之間所應滿足的約束條件。
完整性約束條件可分為以下六類:
●靜態列級約束
●靜態元組約束
●靜態關系約束
●動態列級約束
●動態元組約束
●動態關系約束
1. 靜態列級約束是對一個列的取值域的說明,包括以下幾個方面:
(1)對數據類型的約束,包括數據的類型、長度、單位、精度等;
(2)對數據格式的約束。例如規定日期的格式為YYYY-MM-DD;
(3)對取值范圍或取值集合的約束。例如規定學生的成績取值范圍為0~100;
(4)對空值的約束,規定哪些列可以為空值,哪些列不能為空值;
2. 靜態元組約束就是規定元組的各個列之間的約束關系。例如,訂貨關系中包含發貨量、訂貨量等列,規定發貨量不得超過訂貨量。
3. 靜態關系約束是指在一個關系的各個元組之間或者若干關系之間存在的約束。常見的靜態約束有:
(1)實體完整性約束;
(2)引用完整性約束;
(3)函數依賴約束;大部分函數依賴約束都在關系模式中定義。
(4)統計約束;即欄位值與關系中多個元組的統計值之間的約束關系。例如,規定部門經理的工資不得高於本部門職工平均工資的5倍,不得低於本部門職工平均工資的2倍。
4. 動態列級約束是修改列定義或列值時應滿足的約束條件,包括下面兩方面:
(1)修改列定義時的約束。例如,將允許空值的列改為不允許空值時,如果該列目前已存在空值,則拒絕這種修改。
(2)修改列值時的約束。修改列值時有時需要參照其舊值,並且新舊值之間需要滿足某種約束條件。例如,職工調整後的工資不得低於其調整前的原來工資;職工婚姻狀態的變化只能是由未婚到已婚、已婚到離異、離異到再婚等幾種情況。
5. 動態元組約束是指修改元組的值時元組中各個欄位間需要滿足某種約束條件。例如,職工工資調整時新工資不得低於原工資+工齡*1.5等。
6. 動態關系約束是加在關系變化前後狀態上的限制條件。例如,在集成電路晶元設計資料庫中,一個設計中用到的所有單元的工藝必相同,因此,在更新某個設計單元時,設計單元的新老工藝必須保持一致。
『柒』 資料庫的完整性是什麼啊!
資料庫的完整性的全名叫做:關系資料庫的參照完整性(Referential Integrity),一般是用在表示多個表之間關系時用的,而且經常使用。比如說,現在有兩個表:
Student(StudentNumber, StudentName) 和 Teacher(TeacherNumber, TeacherName, StudentNumber)
其中Teacher表中的studentNumber是外鍵,並且Student表中的StudentNumber是主鍵,因此肯定會有如下的參照完整性:Teacher表中的studentNumber的值必須在Student表中的StudentNumber已經存在。
這就是所謂的參照完整性,它是一個很普遍的概念。1什麼是資料庫的完整性? DBMS的完整性子系統的功能是什麼?資料庫的完整性是指數據的正確性和相容性。DBMS完整性子系統的功能是:(1)監督事務的執行,並測試是否違反完整性規則;(2)如有違反,則採取恰當的操作,如拒絕、報告違反情況,改正錯誤等方法進行處理。2完整性規則由哪幾個部分組成?關系資料庫的完整性規則有哪幾類?完整性規則由三部分組成:觸發條件:即什麼時候使用規則進行檢查;約束條件:即要檢查什麼樣的錯誤;ELSE子句:即查出錯誤後該如何處理。 完整性規則有以下三類:域完整性規則,用於定義屬性的取值范圍;域聯系的規則,定義一個或多個關系中,屬性值間的聯系、影響和約束。關系完整性規則,定義更新操作對資料庫中值的影響和限制。3試詳述SQL中的完整性約束機制?SQL中的完整性約束規則有主鍵約束、外鍵約束、屬性值約束和全局約束等多種形式。△主鍵約束。它是數據中最重要的一種約束。在關系中主鍵值不允許空,也不允許出現重復,體現了關系要滿足實體完整性規則。主鍵可用主鍵子句或主鍵短語進行定義。△外鍵約束。根據參照完整性規則,依賴關系中外鍵或者為空值,或者是基本關系(參照關系)中的該鍵的某個值。外鍵用外鍵關系子句定義,並考慮刪除基本關系元組或修改基本關系的主鍵值的影響,依賴關系可按需要採用RESTRICT、SET NULL、CASCADE方式。△屬性值約束。當要求某個屬性的值不允許空值時,那麼可以在屬性定義後加上關鍵字: NOT NULL ,這是非空值約束。還可以用CHECK子句對一個屬性值加以限制以及使用域約束子句CREATDOMAIN定義新域並加以屬性值檢查。△全局約束。在關系定義時,可以說明一些比較復雜的完整性約束,這些約束涉及到多個屬性間的聯系或不同關系間的聯系,稱為全局約束。主要有基於元組的檢查子句和斷言。前者是對單個關系的元組值加以約束,後者則可對多個關系或聚合操作有關的完整性約束進行定義。4參照完整性規則在SQL可以用哪幾種方式實現?刪除基本關系的元組時,依賴關系可以採取的做法有哪三種?修改基本關系的主鍵值時,依賴關系可以採取的做法有哪三種?參照完整性規則要求"不引用不存在的實體",參照完整性規則在SQL可用以下幾種方式實現:(1)在SQL中採用外鍵子句定義外鍵,並考慮刪除基本關系元組或修改基本關系的主鍵值,對依賴關系產生的影響;(2)在屬性值上進行約束如基於屬性的檢查;(3)全局約束中的基於元組的檢查子句等。刪除基本關系元組或修改基本關系的主鍵值時,依賴關系可以採用的做法有:△RESTRICT方式:只有當依賴關系中沒有一個外鍵值與基本關系中要刪除/修改的主鍵值相對應時,系統才能執行刪除/修改操作,否則拒絕刪除或修改。△SET NULL方式:刪除基本元組時,將依賴關系中所有與基本關系中被刪除主鍵值相對應的外鍵值置為空值。修改基本關系的主鍵值時,將依賴關系中所有與基本關系中被修改主鍵值相對應的外鍵值置為空值。△CASCADE方式:若刪除則將依賴關系中所有外鍵值與基本關系中要刪除的主鍵值相對應的元組一並刪除,若修改則將依賴關系中所有與基本關系中要修改的主鍵值相對應的外鍵值一並修改為新值。5試對SQL2中的基於屬性的檢查約束、基於元組的檢查約束和斷言三種完整性約束進行比較:各說明什麼對象?何時激活?能保證資料庫的一致性嗎?約束形式說明對象激活條件是否保證一致性基於屬性的檢查只對一個屬性值加以約束插入或修改屬性值時不一定基於元組的檢查對單個關系的元組值加以約束在插入或修改元組時不一定斷言多個關系或聚合操作任何變動保證6設教學資料庫的模式如下:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)試用多種方式定義下列完整性約束:(1)在關系S中插入學生年齡值應在16~25歲之間(2)在關系SC中插入元組時,其S#值和C#值必須分別在S和C中出現。(3)在關系SC中修改GRADE值時,必須仍在0~100之間。(4)在刪除關系C中一個元組時,首先要把關系SC中具有同樣C#的元組全部刪去。(5)在關系S中把某個S#值修改為新值時,必須同時把關系SC中那些同樣的S#值也修改為新值。(1)定義S時採用檢查子句:CREAT TABLE S(S# CHAR(4),SNAME char (10) NOT NULL ,AGE SMALLINT ,PRIMARY key(S#),CHECK (AGE>=16 and AGE<=25) ) (2)採用外鍵子句約束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#),FOREIGN key(C#) REFERENCE C(C#))(3)採用元組檢查CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#),FOREIGN key(C#) REFERENCE C(C#),CHECK (GRADE>=0 and AGE<=100) ) (4)採用外鍵約束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#),FOREIGN key(C#) REFERENCE C(C#))若改為:在刪除關系C中一個元組時,同時把關系SC中具有同樣C#的元組全部刪去, 則為:......FOREIGN key(C#) REFERENCE C(C#) ON DELETE CASCADE......(5)採用外鍵約束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#) ON UPDATE CASCADE ,FOREIGN key(C#) REFERENCE C(C#))6.20在教學資料庫的關系S、SC、C中,試用SQL2的斷言機制定義下列兩個完整性約束:(1)學生必須在選修Maths課後,才能選修其他課程。(2)每個男學生最多選修20門課程(1)CREAT ASSERTION ASSE1 CHECK( NOT EXISTS( SELECT S FROM SCWHERE C# IN(SELECT C#FROM CWHERE CNAME<>'MATHS')AND S# NOT IN(SELECT S# FROM SCWHERE C# IN(SELECT C#FROM CWHERE CNAME='MATHS')));(2)CREAT ASSERTION ASSE2 CHECK( ALL(SELECT COUNT (SC.C#)FROM S,SCWHERE S.S#=SC.S AND SEX='M'GROUP BY S#)<=20);
『捌』 問題:什麼是資料庫的完整性
答:資料庫的完整性是指數據的正確性和相容性。 問題:資料庫的完整性概念與資料庫的安全性概念有什麼區別和聯系?答: 資料庫的完整性是指數據的正確性和相容性、資料庫的安全性是指保護資料庫.以防止不合法的使用造成的數據泄密、更改或破壞。其相同點是兩者都是對資料庫中的數據進行控制.各自所實現的功能目標不同。問題:什麼是資料庫的完整性約束條件?可分為哪幾類?答: 數據完整性約束是為了保證進入資料庫中的數據的有效性而定義的數據規則、它可以分為以下兩類. ①針對不同的對象可以分為表級約束、元塑級約束和屬性級約束(也稱列約束);表級約束是若干元組間、關系中及關系之間的約束:元組級約束則是元組中的欄位組和欄位間聯系的約束;屬性級約束主要是針對列的類型、取值范圍、精度、排序等而制定的約束條件。②針對數據對象的狀態可以分為靜態約束和動態約束:靜態約束是指資料庫每一確定狀態時的數據對象所應滿足的約束條件.它是反映資料庫狀態穩定時的約束.動態約束是指資料庫從一種狀態轉變為另一種狀態時.新、舊值之間所應滿足的約束條件.它是反映資料庫狀態變遷的約束。 問題: 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)用戶周平具有對兩個表的所有權力(讀、插、改、刪數據),並具有給其他用戶授權的權利。
『玖』 資料庫中,如何保證數據完整性
保證數據的完整性:
1. 用約束而非商務規則強制數據完整性
如果你按照商務規則來處理需求,那麼你應當檢查商務層次/用戶界面:如果商務規則以後發生變化,那麼只需要進行更新即可。
假如需求源於維護數據完整性的需要,那麼在資料庫層面上需要施加限制條件。
如果你在數據層確實採用了約束,你要保證有辦法把更新不能通過約束檢查的原因採用用戶理解的語言通知用戶界面。除非你的欄位命名很冗長,否則欄位名本身還不夠。 — Lamont Adams
只要有可能,請採用資料庫系統實現數據的完整性。這不但包括通過標准化實現的完整性而且還包括數據的功能性。在寫數據的時候還可以增加觸發器來保證數據的正確性。不要依賴於商務層保證數據完整性;它不能保證表之間(外鍵)的完整性所以不能強加於其他完整性規則之上。
— Peter Ritchie
2. 分布式數據系統
對分布式系統而言,在你決定是否在各個站點復制所有數據還是把數據保存在一個地方之前應該估計一下未來5 年或者10 年的數據量。當你把數據傳送到其他站點的時候,最好在資料庫欄位中設置一些標記。在目的站點收到你的數據之後更新你的標記。為了進行這種數據傳輸,請寫下你自己的批處理或者調度程序以特定時間間隔運行而不要讓用戶在每天的工作後傳輸數據。本地拷貝你的維護數據,比如計算常數和利息率等,設置版本號保證數據在每個站點都完全一致。
— Suhair TechRepublic
3. 強制指示完整性
沒有好辦法能在有害數據進入資料庫之後消除它,所以你應該在它進入資料庫之前將其剔除。激活資料庫系統的指示完整性特性。這樣可以保持數據的清潔而能迫使開發人員投入更多的時間處理錯誤條件。
— kol
4. 關系
如果兩個實體之間存在多對一關系,而且還有可能轉化為多對多關系,那麼你最好一開始就設置成多對多關系。從現有的多對一關系轉變為多對多關系比一開始就是多對多關系要難得多。
— CS Data Architect
5. 採用視圖
為了在你的資料庫和你的應用程序代碼之間提供另一層抽象,你可以為你的應用程序建立專門的視圖而不必非要應用程序直接訪問數據表。這樣做還等於在處理資料庫變更時給你提供了更多的自由。
— Gay Howe
6. 給數據保有和恢復制定計劃
考慮數據保有策略並包含在設計過程中,預先設計你的數據恢復過程。採用可以發布給用戶/開發人員的數據字典實現方便的數據識別同時保證對數據源文檔化。編寫在線更新來「更新查詢」供以後萬一數據丟失可以重新處理更新。
— kol
7. 用存儲過程讓系統做重活
解決了許多麻煩來產生一個具有高度完整性的資料庫解決方案之後,我所在的團隊決定封裝一些關聯表的功能組,提供一整套常規的存儲過程來訪問各組以便加快速度和簡化客戶程序代碼的開發。在此期間,我們發現3GL 編碼器設置了所有可能的錯誤條件,比如以下所示:
SELECT Cnt = COUNT (*)
FROM [<Table>]
WHERE [<primary key column>] = <new value>
IF Cnt = 0
BEGIN
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES ( <New value> )
END
ELSE
BEGIN
<indicate plication error>
END
而一個非3GL 編碼器是這樣做的:
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES
( <New value> )
IF @@ERROR = 2627 -- Literal error code for Primary Key Constraint
BEGIN
<indicate plication error>
END
第2 個程序簡單多了,而且事實上,利用了我們給資料庫的功能。雖然我個人不喜歡使用嵌入文字(2627)。但是那樣可以很方便地用一點預先處理來代替。資料庫不只是一個存放數據的地方,它也是簡化編碼之地。
— a-smith
8. 使用查找
控制數據完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數據的一致性。某些公共數據特別適合查找:國家代碼、狀態代碼等