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