摘 要:隨著SQL Server數(shù)據(jù)庫的廣泛使用,針對其數(shù)據(jù)完整性的問題,本文討論了它的主要技術(shù)內(nèi)容。
關(guān)鍵詞:數(shù)據(jù)庫 數(shù)據(jù)完整性 SQL Server
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1672-3791(2012)10(a)-0010-01
數(shù)據(jù)管理中最重要的是維護數(shù)據(jù)的完整性。一個數(shù)據(jù)庫系統(tǒng)必然要求其提供保護重要數(shù)據(jù)不易受損壞的功能,同時要使數(shù)據(jù)的管理合乎規(guī)范,不接受錯誤的操作和不合規(guī)范的數(shù)據(jù)。
SQL Server數(shù)據(jù)完整性主要包括:實體完整性、域完整性、參照完整性和用戶完整性。使用以上這幾種完整性從局部到整體各方面來共同維護數(shù)據(jù)的完整性,使得管理者和用戶能夠輕松的進行數(shù)據(jù)管理和使用。
1 實體完整性
實體完整性就是定義某個特定表的每一行是唯一的實體。SQL Server通過索引、主關(guān)鍵字約束、唯一性約束和IDENTITY屬性來保證數(shù)據(jù)庫中的表的每一行都是唯一的。這對于表是十分重要的。
1.1 約束
所謂約束就是SQL Server提供的保證實體完整性的方法,它限制了表中的每一列所能接受所謂數(shù)據(jù),只有滿足約束條件的數(shù)據(jù)才能送入該列存儲。
1.2 主關(guān)鍵字約束
主關(guān)鍵字約束是實體完整性中最重要的,它用來唯一標(biāo)識表中的一列或一組列。被主關(guān)鍵字約束的列或列組中的數(shù)據(jù)必須是獨立的。被主關(guān)鍵字約束的列或列組不允許為空,同時在每個表中只能有一個主關(guān)鍵字約束。
1.3 唯一性約束
唯一性約束和主關(guān)鍵字約束看上去很相似,它也是用來保證表中某一列的數(shù)據(jù)是不重復(fù)的。但它約束的列的數(shù)據(jù)可以為空,同時一個表中可以具有很多唯一性約束,而主關(guān)鍵字約束只能有一個。
1.4 IDENTITY屬性
如果建立一列具有IDENTITY屬性的列,SQL Server就會為這一列中的每一行設(shè)立一個與其他行不同的值來標(biāo)識這一行。所以IDENTITY屬性和主關(guān)鍵字約束聯(lián)合起來使用,可以使數(shù)據(jù)庫的每一行都有一個獨立的值來表示。
2 域完整性
域完整性指一個列內(nèi)的數(shù)據(jù)輸入必須是符合標(biāo)準(zhǔn)和規(guī)則的。SQL Server提供了規(guī)則和CHECK約束來實現(xiàn)數(shù)據(jù)庫的域完整性。
2.1 規(guī)則
規(guī)則相當(dāng)于一個標(biāo)準(zhǔn),它可以用來判斷數(shù)據(jù)是否符合要求的規(guī)則。規(guī)則與約束不同,規(guī)則是一種獨立的數(shù)據(jù)庫對象,它可以被許多表使用,用來檢驗表中的列數(shù)據(jù),所以使用規(guī)則必須把它和表中的列捆綁起來才能使用。
2.2 CHECK約束
CHECK約束也是來實現(xiàn)域完整性的,也是用來對列數(shù)據(jù)進行嚴(yán)格的檢驗和約束的。但它和規(guī)則不同,每一列可以使用許多CHECK約束,但只能捆綁一個規(guī)則,同時CHECK約束不必專門定義,使用更加簡單。使用CHECK約束有幾個特點,使用時應(yīng)當(dāng)注意:每一列可以使用多個CHECK約束;CHECK約束的條件不能與其他表相關(guān);多個CHECK約束可以和一個規(guī)則共同限制同一列。
3 參照完整性
參照完整性指不同數(shù)據(jù)表之間的數(shù)據(jù)關(guān)系的完整。對于一個大型的數(shù)據(jù)庫,不同的表之間有很密切的關(guān)系,一旦對其中一個表的數(shù)據(jù)進行刪除和修改,必然會影響其他表的數(shù)據(jù)是否要隨之刪除或修改。SQL Server提供了很好的參照完整性,它是通過外關(guān)鍵字約束和觸發(fā)器實現(xiàn)的。
3.1 外關(guān)鍵字約束
外關(guān)鍵字約束是對某一列或列組進行限制來加強數(shù)據(jù)表之間的聯(lián)系。這一列稱為外關(guān)鍵字。外關(guān)鍵字一般是在一個表中建立的與另一個表中的主關(guān)鍵字相對應(yīng)的列。外關(guān)鍵字不但可以與主關(guān)鍵字對應(yīng),還可以與被唯一約束限制的列對應(yīng)。同時外關(guān)鍵字列允許為空,所以外關(guān)鍵字的值要么為另一表中的主關(guān)鍵字列或被唯一性約束限制的列的數(shù)據(jù),要么為空。
3.2 觸發(fā)器對參照完整性的作用
使用觸發(fā)器也能實現(xiàn)參照完整性,不過觸發(fā)器一般用來完成約束無法完成的任務(wù)。在進行對某個表的插入、修改和刪除操作時,使用觸發(fā)器檢查相關(guān)的數(shù)據(jù),如果有沖突,先將沖突解決然后再進行這些操作,這樣就維護了參照完整性。
4 用戶定義完整性
用戶定義完整性允許用戶自定義不屬于以上三種情況的完整性。SQL Server是一個開放的數(shù)據(jù)庫系統(tǒng),它允許用戶針對自己的需要對完整性進行擴展。如果用戶對現(xiàn)有的數(shù)據(jù)完整性不滿意,用戶可以使用規(guī)則、觸發(fā)器、存儲過程以及所有的約束來定義針對自己需要的完整性。
5 結(jié)語
SQL Server提供了完善的數(shù)據(jù)完整性概念,使用多層次數(shù)據(jù)完整性管理結(jié)構(gòu),使得數(shù)據(jù)的完整性得到充分的保障。本文通過介紹數(shù)據(jù)完整性來詳細(xì)說明了如何用有關(guān)的數(shù)據(jù)庫對象來維護數(shù)據(jù)庫的數(shù)據(jù)完整性。
參考文獻
[1] 李雁翎.數(shù)據(jù)庫技術(shù)及應(yīng)用-SQL Server[M].北京:高等教育出版社,2010.
[2] 鄭阿奇.SQL SERVER實用教程[M].北京:電子工業(yè)出版社,2008.
[3] 李春葆,曾平.SQL SERVER2000應(yīng)用系統(tǒng)開發(fā)教程[M].北京:清華大學(xué)出版社.
[4] 鄭沫.SQL SERVER開發(fā)實例精解[M].北京:希望電子出版社,2008.