摘要:在數據庫廣泛應用的當下,保證數據的準確性和有效性顯得尤為重要。文章基于SQL Server數據庫,分析了其數據完整性的概念及分類,通過典型例子幫助用戶了解相關方法的使用。
關鍵詞:SQL Server;數據完整性;約束
引言
在信息技術迅速發展的今天,數據庫應用越來越廣泛。如網站、醫療、交通、高校、政府、企業等無一不每天在利用數據庫存儲與管理著大量的數據。而往往在數據錄入時,會因種種原因經常會出現重復、無效、錯誤等信息。在眾多后臺數據庫管理系統中,因SQL Server有著功能強大、操作簡便等特點,受到了廣大數據庫用戶喜愛,文章基于SQL Server數據庫介紹數據完整性機制以及相關應用[1]。
1數據完整性的概念和分類
數據完整性是指存儲在數據庫中的數據的一致性和準確性[2]。它是應用防止數據庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。數據完整性分為四類:實體完整性、域完整性、參照完整性和用戶自定義完整性。其定義分別為:
實體完整性:是指保證表中所有的行唯一。實體完整性要求表中的所有行都要有一個唯一的標識符,即通過設置“主鍵”來實現。數據庫中的“主鍵”字段則是不能輸入重復值或空值,所謂“空值”其實就是“沒有”或“無意義”的值。反言之,如果主屬性取了空值,則無法進行唯一標識,這與現實世界的應用環境相矛盾。
域完整性:是指一個列的輸入有效性。域完整性主要用于保證給定字段數據的輸入有效性,強制域完整性的方法有:限制類型、格式或可能值的范圍。如限制學生成績必須在0~100之間,性別只能是“男”或“女”等。
參照完整性:是指保證主關鍵字和外部關鍵字之間的參照關系。參照完整性又稱引用完整性,利用“外鍵”來確保相關聯的表(兩個或兩個以上表)間數據的一致性。當添加、刪除和修改記錄時,參照完整性可以保證表之間已定義的關系,確保鍵值在所有表中一致。如向“學生成績表”中添加某個學生成績時必須確保所有添加成績的學生必須在“學生表”中是存在的,否則不允許添加。
用戶自定義完整性:是指根據應用環境的要求和實際的需要,對某一具體應用所涉及的數據提出約束性條件。這一約束機制一般不應由應用程序提供,而應有由關系模型提供定義并檢驗,用戶定義完整性主要包括字段有效性約束和記錄有效性。
2數據完整性的應用
為了確保數據的完整與有效性,防止數據庫中存在不符合語義規定的數據,防止因錯誤信息的輸入、輸出而造成無效的操作或錯誤信息,SQL Servr提供了4種手段來實現數據完整性,即缺省值、規則、約束和觸發器等[3]。
2.1通過缺省值實現數據完整性
缺省值即默認值,是為列提供數據的一種方式,如果用戶在進行插入操作時不為列輸入任務數據,則使用缺省值自動輸入。可利用表設計器創建表時指定默認值,也可在使用Create Table語句中的Default子句指定默認值。
SQL語句中利用默認值實現數據完整性應用例子如下:
Create Table Teacher???--創建教師表
(t_id?char(10),
t_name varchar(10),
t_professor varchar(10) default(“助教”))--職稱字段默認值為助教
2.2通過規則實現數據完整性
規則是用以限制存儲在表中或用戶自定義數據類型的值,是獨立的數據庫對象,只有將規則綁定到列或用戶自定義數據類型時,規則才能起作用,而表中的每列或每個用戶定義數據類型只能和一個規則綁定。如果要刪除規則,則應先解除綁定。
SQL語句中利用規則實現數據完整性應用例子如下:
Create Rule r_age as @age<=100 and @age>=1
--定義規則年齡限制區間
Exec sp_bindrule ‘r_age’,’teacher.age’
--使用存儲過程綁定規則
2.3通過約束實現數據完整性
約束是指在創建表時設置各種條件對輸入、修改的數據進行監測,使不符合語義規定的數據不能進入數據庫,以確保數據的完整性與有效性。SQL Server數據庫提供了主鍵約束、外鍵約束、唯一約束、檢查約束、非空約束與自動編號約束等6種約束方式。
2.3.1主鍵約束(PRIMARY KEY)
主鍵約束是為了保證數據實體完整性,用于唯一地標識表中的每一行。主鍵字段不能出現重復值或空值。在一個表中只能有一個主鍵,主鍵可以是一個字段,也可以是字段的組合。
Create Table Department --創建系部表
(d_id?char(10) PRIMARY KEY, --系部編號,設置為主鍵
d_name varchar(20),
d_leader varchar(10))
2.3.2外鍵約束(FOREIGN KEY)
外鍵約束是為了保證數據參照完整性,用于在建立一個或多個表的字段之間的引用聯系。在創建時在被引用表上創建主鍵或唯一約束,在引用表的字段上創建外鍵約束。外鍵約束必須是另一個表的主鍵,這樣在當前表上才能稱為外鍵。
Create Table Teacher
(t_id?char(10) PRIMARY KEY, --教師工號,設置為主鍵
t_name varchar(10),
t_sex char(2)CHECK(t_sex=’男’or t_sex=’女’),
t_professor varchar(10) default(“助教”))
d_id char(10) FOREIGN KEY references Deparment(d_id))
--系部編號,外鍵,與系部表的“系部編號”關聯
2.3.3唯一約束(UNIQUE)
唯一約束要求該列唯一,允許有空值,但只能出現一個空值。與主鍵約束類似,也具有唯一性,為表中的一列或多列提供數據實體完整性,一個表可以設置多個唯一約束。
Create Table Department
(d_id?char(10) PRIMARY KEY,
d_name varchar(20) UNIQUE,?--系部名稱,唯一約束
d_leader varchar(10) UNIQUE))?--系部領導,唯一約束
2.3.4檢查約束(CHECK)
檢查約束是為了保證域完整性,檢查約束可為所屬字段設定一個邏輯表達式來限定有效取值范圍。檢查約束只在添加和修改記錄時有效,在刪除時無效。一個列上只能定義一個檢查約束。
Create Table Teacher
(t_id?char(10) PRIMARY KEY,
t_name varchar(10),
t_sex char(2)CHECK(t_sex=’男’or t_sex=’女’),
--教師性別,檢查約束
t_professor varchar(10) default(“助教”))
d_id char(10) FOREIGN KEY references Deparment(d_id))
2.3.5非空約束(NOT NULL)
非空約束也是為了保證數據實體完整性,有些表中字段雖然不需要設置主鍵字段,但其信息不允許為空值,則可利用非空約束來設置。
Create Table Teacher
(t_id?char(10) PRIMARY KEY,
t_name varchar(10) NOT NULL,?--教師姓名,非空約束
t_sex char(2)CHECK(t_sex=’男’or t_sex=’女’),
t_professor varchar(10) default(“助教”))
d_id char(10) FOREIGN KEY references Deparment(d_id))
2.3.6自動編號約束(IDENTITY)
自動編號約束又稱作標識列,采用數字編號的方式依次增加一個增量。是為那些數字順序遞增的列準備的約束,可以自動完成數值添加。
Create Table Department
(d_id?int identity(1,1)PRIMARY KEY,
--系部編號,整型,主鍵約束,自動編號(增量為1)
d_name varchar(20) UNIQUE,
d_leader varchar(10) UNIQUE))
若要實現更為復雜的數據約束,可以使用觸發器實現,在此不再贅述。
3結束語
通過上述數據完整性的概念與分類闡述,并通過相關例子的實現來說明數據完整性是如何建立和實施。在具體應用過程中,需要結合實際情況選擇相應方法來保證數據的準確性和有效性。
作者簡介:
孫楓(1977-),女,江蘇南通人,中學高級,碩士研究生(方向:現代教育技術),江蘇省南通第一中學信息中心教師。
參考文獻:
[1]陳潔,薛恒威. SQL Server數據庫中數據完整性的分析與實踐[J]河北軟件職業技術學院學院學報,2018
[2]陳金萍,陳艷,姜廣坤. SQL Server2012數據庫項目化教程[M].清華大學出版社,2017
[3]從艷. SQL Server數據庫完整性的維護[J].電腦知識與技術,2007
[4]陳增祥. SQL Server數據庫數據完整性的研究與分析[J].信息安全與技術,2012
[5]李浩,周媛媛. SQL Server數據完整性及約束[J].科技與企業,2013