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