摘 要:現(xiàn)今社會是一個數(shù)據(jù)化的社會,各行各業(yè)都有大量的,不同種類的數(shù)據(jù)進行交換。數(shù)據(jù)庫的使用已經(jīng)滲透到生活中的各個方面。而數(shù)據(jù)庫的完整性是設計數(shù)據(jù)庫的的重要內(nèi)容,關系到數(shù)據(jù)庫的性能的好壞。如何防止將一些無效的或錯誤的信息添加到數(shù)據(jù)庫中呢?本文對Sql Server2005數(shù)據(jù)庫數(shù)據(jù)完整性約束進行了探討。
關鍵詞:Sql Server 數(shù)據(jù)完整性
中圖分類號:TP3 文獻標識碼:A 文章編號:1672-3791(2013)01(c)-0027-01
數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、有效性和兼容性,防止錯誤數(shù)據(jù)進入數(shù)據(jù)庫,保證數(shù)據(jù)庫中的數(shù)據(jù)質量。本文詳細介紹了數(shù)據(jù)庫的數(shù)據(jù)完整性以及如何對數(shù)據(jù)庫進行完整性約束。
1 數(shù)據(jù)完整性的概念及其分類
數(shù)據(jù)完整性是指存儲在數(shù)據(jù)庫中的數(shù)據(jù)是正確的,而且在邏輯上符合現(xiàn)實情況的要求,它是SQL Server用于保證數(shù)據(jù)庫中數(shù)據(jù)一致性的一種機制,以防止非法信息存在于數(shù)據(jù)庫中。數(shù)據(jù)庫中的數(shù)據(jù)要求具有正確性、有效性和兼容性。數(shù)據(jù)的正確性是指數(shù)據(jù)的合法性;有效性是指數(shù)據(jù)是否屬于所定義的有效范圍;相容性是指妙術同一現(xiàn)實的數(shù)據(jù)應該保持一致。SQL Server 2005提供了許多措施來保護數(shù)據(jù)的完整性,如數(shù)據(jù)類型、主鍵、外鍵、默認值、約束和規(guī)則等。
數(shù)據(jù)庫完整性一般分為4類:實體完整性、域完整性、引用完整性和用戶定義完整性。
1.1 實體完整性
實體完整性的基本思想是標識數(shù)據(jù)庫中存放的每一個實體。實體就是數(shù)據(jù)庫所要標識的一個實際的物體和事件。實體完整性要求每個實體都保持唯一性。例如,學生信息表中的學號列、公民信息表中的身份證號列都可以有效地標識這些實體,保證其唯一性。SQL Server 2005實現(xiàn)實體完整性主要是通過唯一索引、UNIQUE約束、PRIMARY KEY約束或IDENTITY屬性,強制表的標識符列或主鍵來實現(xiàn)的。
1.2 域完整性
域完整性是指給定列的輸入有效性,即如何限制向表中輸入值的范圍。它要求表中指定列的數(shù)據(jù)具有正確的數(shù)據(jù)類型、格式和有效的數(shù)據(jù)范圍。例如,在成績表的“成績”列中,只能輸入特定范圍內(nèi)的值(如0~100),才是合法的數(shù)據(jù)。域完整性可以通過強制域完整性限制類型(通過使用數(shù)據(jù)類型)、限制格式(通過使用CHECK約束和規(guī)則)或限制可能值的范圍(通過使用FOREIGN KEY約束、CHECK約束、DEFAULT定義、NOT NULL定義和規(guī)則)來實現(xiàn)。
1.3 引用完整性
引用完整性又稱為參照完整性。在輸入或刪除記錄時,引用完整性用于維持參照表和被參照表之間的數(shù)據(jù)一致性。用于確保鍵值在所有表中一致。這類一致性要求不能引用不存在的值。如果一個鍵值發(fā)生更改,則整個數(shù)據(jù)庫中,對該鍵值的所有引用要進行一致的更改。在被參照表中,當其主鍵值被其他表所參照時,該行不能被刪除也不允許改變。在參照表中,不允許參照不存在的主鍵值。在SQL Server 2005中,引用完整性通過主鍵(PRIMARY KEY)和外鍵(FOREIGN KEY)約束來實現(xiàn)。
1.4 用戶定義的完整性
用戶定義的完整性即是針對某個特定關系數(shù)據(jù)庫的約束條件,它反映某一具體應用所涉及的數(shù)據(jù)必須滿足的語義要求。SQL Server 2005提供了一些工具來幫助用戶實現(xiàn)數(shù)據(jù)完整性,其中最主要的是規(guī)則(Rule)、約束(Constraint)和觸發(fā)器(Trigger)。
2 數(shù)據(jù)完整性約束的實現(xiàn)
下面以創(chuàng)建一個“學生管理數(shù)據(jù)庫”為例來說明SQL Server對數(shù)據(jù)庫完整性約束的實現(xiàn)。
2.1 創(chuàng)建“學生管理數(shù)據(jù)庫”
create database學生管理數(shù)據(jù)庫
on (name=學生管理數(shù)據(jù)庫,filename=’F:/sql/學生管理.mdf’,size=3,maxsize=100,filegrowth=10%)
log on (name=學生管理數(shù)據(jù)庫_log,filename=’F:/sql/學生管理log.mdf’,size=3,maxsize=100,filegrowth=10%)
2.2 在此數(shù)據(jù)庫中創(chuàng)建3個表,學生信息表、課程表、成績表
(1)創(chuàng)建學生信息表。
Create table student
(s_no char(8) not null primary key,s_name char(8) not null,s_sex char(2) not null,s_birthday datetime not null)
(2)創(chuàng)建課程信息表。
Create table course
(c_no char(8) not null primary key,c_name charh+KPQbe71Otz0PSA7FCS6Q==(8) not null,c_credit char(2) not null)
(3)創(chuàng)建成績表。
Create table score
(s_no char(8) not null constraint fk_s forgein key(s_no) references student(s_no),
c_no char(8) not null constraint fk_c forgein key(c_no) references course(c_no),
sc_score int not null constraint check_sc check(sc_score<=100),
constraint pk_sc primary key(s_no,c_no)
在上述三個表的創(chuàng)建中實現(xiàn)了實體完整性,域完整性和引用完整性。例如在成績表與學生信息表中實現(xiàn)了學號(s_no)引用相關性。學生在退學后需要刪除該學生的信息時,應在學生信息表中刪除,由于成績表中可能還有該學生的成績信息,因此必須在學生信息表和成績表中同步刪除信息,同步更新信息。同理,課程表與成績表也要同步更新。否則,表中的數(shù)據(jù)將為無效數(shù)據(jù)。此例中域的完整性是通過檢查約束(check)來實現(xiàn)的,輸入學生成績大于100分的則為非法數(shù)據(jù)。通過這種數(shù)據(jù)完整性約束,可以使數(shù)據(jù)庫中的對個表保持數(shù)據(jù)的一致性。
3 結語
數(shù)據(jù)庫中的數(shù)據(jù)完整性為我們更好的使用數(shù)據(jù)庫提供了良好的保障。除了文中介紹的數(shù)據(jù)完整性約束的方法還有之前提到的多種方法,如規(guī)則,觸發(fā)器等。我們要學會融會貫通實體完整性、域完整性、引用完整性和用戶定義完整性,這四種數(shù)據(jù)完整性約束的方法,在不同的情況下利用不同的方法。使我們的數(shù)據(jù)庫更加的完善。
參考文獻
[1]何玉潔.數(shù)據(jù)庫管理與編程技術[M].清華大學出版社,2007.
[2]劉志成.SQL Server 2005實例教程[M].電子工業(yè)出版社,2007.