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