張卉
摘要:sql server 2012能夠方便的幫助用戶(hù)實(shí)現(xiàn)數(shù)據(jù)的管理功能,保障了數(shù)據(jù)庫(kù)中數(shù)據(jù)的有效性、正確性和相容性,提供給用戶(hù)多種技術(shù)實(shí)現(xiàn)數(shù)據(jù)的完整性。比如約束、規(guī)則、外鍵和觸發(fā)器。約束其實(shí)是通過(guò)對(duì)規(guī)則的完整性來(lái)實(shí)現(xiàn)數(shù)據(jù)的完整性目標(biāo),本文結(jié)合具體應(yīng)用場(chǎng)景,主要對(duì)約束這一技術(shù)進(jìn)行介紹。
關(guān)鍵詞:SQL Server 2012;數(shù)據(jù)庫(kù);設(shè)計(jì)與應(yīng)用
中圖分類(lèi)號(hào):TP273 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2018)12-0128-01
Microsoft SQL Server 2012是微軟發(fā)布的新一代數(shù)據(jù)平臺(tái)產(chǎn)品,能夠快速構(gòu)建相應(yīng)的解決方案實(shí)現(xiàn)私有云與公有云之間數(shù)據(jù)的擴(kuò)展與應(yīng)用的遷移。但是如果對(duì)數(shù)據(jù)庫(kù)不進(jìn)行約束就有可能導(dǎo)致數(shù)據(jù)的不規(guī)范,影響用戶(hù)的正常使用。因此必須在建立數(shù)據(jù)庫(kù)表的同時(shí)做好數(shù)據(jù)的完整性。約束就是一種普遍采用的數(shù)據(jù)庫(kù)管理技術(shù),能夠?qū)崿F(xiàn)數(shù)據(jù)的有效性、正確性和相容性。
1 實(shí)體完整性
要達(dá)到實(shí)體的完整性就必須在創(chuàng)建表的時(shí)候賦予主鍵字段值,并且值不能重復(fù)??梢酝ㄟ^(guò)對(duì)主鍵和唯一鍵進(jìn)行約束實(shí)現(xiàn)。
1.1 主鍵約束
對(duì)主鍵約束在設(shè)置約束列時(shí)不能賦予重復(fù)值,可以在創(chuàng)建表的時(shí)候?qū)α性O(shè)置主鍵。比如用PRIMARY KEY約束如下:
ALTER TABLE dbo.Blogs
ADD CONSTRAINT pk_constraint_blogId PRIMARY KEY(BlogId)
在鍵文件夾中則生成對(duì)列BlogId的約束即升級(jí)為主鍵。
1.2 唯一鍵約束
和對(duì)主鍵進(jìn)行約束功能一樣,對(duì)唯一鍵進(jìn)行約束就可以實(shí)現(xiàn)數(shù)據(jù)的唯一性。但是唯一鍵約束允許用戶(hù)設(shè)置多個(gè)唯一鍵,同時(shí)可以在列中設(shè)置一個(gè)空值。
在創(chuàng)建表的時(shí)候用戶(hù)會(huì)對(duì)主鍵列進(jìn)行設(shè)置,但是在一張表中只能設(shè)置一個(gè)主鍵約束,所以如果需要對(duì)某一字段的賦值進(jìn)行唯一性設(shè)置,就可以選擇唯一鍵約束。比如在用戶(hù)信息表中,用戶(hù)ID作為主鍵,但是身份證號(hào)碼、手機(jī)號(hào)碼等也具有唯一性,此時(shí)就可以通過(guò)唯一鍵約束實(shí)現(xiàn)賦值要求。
2 域完整性
關(guān)系數(shù)據(jù)庫(kù)的完整性主要通過(guò)域來(lái)進(jìn)行約束,針對(duì)的是具有特殊屬性的值,將符合要求的值用一個(gè)有限的集合表示。當(dāng)不屬于該集合的值進(jìn)行輸入時(shí)會(huì)提示,保證了數(shù)據(jù)庫(kù)的完整性。檢查約束(CHECK)、默認(rèn)值約束(DEFAULT)是SQL server主要采用的技術(shù)。
檢查約束可以對(duì)若干列的值進(jìn)行符合限制的操作,將數(shù)值限定在規(guī)定的集合內(nèi)。比如,在用戶(hù)信息表(userInfo)中,移動(dòng)電話(huà)(userMobile)必須滿(mǎn)足13位數(shù)字且首位不能是0的要求。在不重新進(jìn)行設(shè)置的情況下,數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)都受到檢查約束的作用。在某些情況下,可能出現(xiàn)老數(shù)據(jù)和新數(shù)據(jù)分別符合不同的賦值規(guī)則,如果都采用同一規(guī)則進(jìn)行約束就會(huì)出現(xiàn)矛盾。比如郵政編碼的儲(chǔ)存,由于世界各國(guó)的郵政編碼位數(shù)沒(méi)有統(tǒng)一,我國(guó)采用的是六位,日本采用的是七位數(shù)字,美國(guó)采用的是五位數(shù)字等。在對(duì)這樣的數(shù)據(jù)進(jìn)行約束的時(shí)候,可以進(jìn)行with Nocheck設(shè)置,將老數(shù)據(jù)和新數(shù)據(jù)予以區(qū)別。
3 參照完整性
參照完整性的設(shè)置就是為了避免出現(xiàn)上述類(lèi)似錯(cuò)誤。通過(guò)關(guān)系表之間的相互參照,對(duì)存在的實(shí)體進(jìn)行管理操作。通過(guò)外鍵(FOREIGN KEY)、級(jí)聯(lián)參照等技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性。
3.1 外鍵約束
外鍵(FOREIGN? KEY)約束對(duì)表之間的數(shù)據(jù)一致性進(jìn)行了強(qiáng)制要求。在關(guān)系數(shù)據(jù)庫(kù)中,由主鍵列和外鍵列定義的父表和子表之間,子表的若干列值必須和父表的若干列保持一致。盡管外鍵約束不允許空值的出現(xiàn),但是如果采用組合外鍵進(jìn)行約束,可以對(duì)存在空值的列跳過(guò)檢驗(yàn)。在SQL server中采用如下的格式:
Alter Table 表名
Add Constraint 關(guān)系名 FOREIGN KEY (外鍵列) REFERENCES 主鍵表(主鍵列)。
比如上文提到的將某一個(gè)用戶(hù)數(shù)據(jù)刪除后,外鍵約束可以確保將和該數(shù)據(jù)相關(guān)的其他表中的數(shù)據(jù)刪除,避免因數(shù)據(jù)不一致產(chǎn)生錯(cuò)誤。通過(guò)外鍵約束,將子表(orderinfo)和父表(userinfo)中都存在的userID保持一致。在父表中刪除userID之后,再進(jìn)行userID的賦值將提示“無(wú)法更新”。
3.2 級(jí)聯(lián)參照完整性約束
為了將外鍵數(shù)據(jù)保持關(guān)聯(lián),SQL server采用了級(jí)聯(lián)參照完整性約束。使得父表和子表中的外鍵記錄保持一致,當(dāng)對(duì)父表中的數(shù)據(jù)進(jìn)行操作時(shí),子表中的數(shù)據(jù)也相應(yīng)的得到了操作。級(jí)聯(lián)參照完整性包括更新和刪除兩種。比如以用戶(hù)信息表和訂單信息表為例,userInfo作為父表,orderInfo作為子表。在父表中對(duì)userID進(jìn)行更新后,子表中的userID也相應(yīng)進(jìn)行了更新。SQL server中設(shè)置外鍵約束的格式如下:
Alter table orderInfo
Add constraint FK_會(huì)員信息_訂單信息FOREIGN KEY (userId) REFERENCES userInfo(userId) ON UPDATE CASCADE。
做完上述設(shè)置之后,在父表中對(duì)userID進(jìn)行修改,可以發(fā)現(xiàn)子表中的userID也相應(yīng)的發(fā)生了變化。當(dāng)將ON UPDATE CASCADE更換為ON DELETE后,就可以實(shí)現(xiàn)父表和子表中的同步刪除操作。
綜上所述,約束的使用保障了SQL server中數(shù)據(jù)的完整性,并且比使用規(guī)則、觸發(fā)器、默認(rèn)值等更加靈活便捷。用戶(hù)可以根據(jù)具體案例對(duì)數(shù)據(jù)庫(kù)進(jìn)行約束設(shè)置,實(shí)現(xiàn)數(shù)據(jù)的準(zhǔn)確和安全,從而滿(mǎn)足特定的商業(yè)規(guī)則。
參考文獻(xiàn)
[1]王哲.數(shù)據(jù)庫(kù)中完整性約束的教學(xué)方法探究[J].中國(guó)科教創(chuàng)新 刊,2013(35):164-166.
[2]陳潔,薛恒威.SQL Server數(shù)據(jù)庫(kù)中數(shù)據(jù)完整性的分析與實(shí)踐[J].河北軟件職業(yè)技術(shù)學(xué)院學(xué)報(bào),2018(1):4-6.
[3]王紅,陳功平.數(shù)據(jù)完整性機(jī)制的研究與實(shí)現(xiàn)[J].佛山科學(xué)技術(shù)學(xué)院學(xué)報(bào),2015(1):81-87.
Design and Application of Database Constraints Based on SQL Server 2012
ZHANG Hui1,2
(1. Suzhou Higher Vocational and Technical School, Suzhou Jiangsu? 215009;
2.Suzhou Branch of Jiangsu Union Vocational and Technical College,Suzhou Jiangsu? 215009)
Abstract:SQL Server 2012 can easily help users to achieve data management functions, and ensure the validity, correctness and compatibility of data in the database, it provides users with a variety of technologies to achieve data integrity. For example, constraints, rules, foreign keys and triggers. Constraints are actually to achieve the goal of data integrity through the integrity of rules. This paper mainly introduces the technology of constraints combined with specific application scenarios.
Key words:SQL Server 2012; database; design and application