999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

論SQL Server中數(shù)據(jù)完整性實(shí)現(xiàn)

2009-07-05 06:53:04
現(xiàn)代商貿(mào)工業(yè) 2009年22期

韓 杰

摘 要:數(shù)據(jù)完整性是數(shù)據(jù)庫(kù)安全中一個(gè)重要的部分,對(duì)保護(hù)數(shù)據(jù)正確性、一致性和有效性有重要作用,是在進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)要考慮的一個(gè)重要問(wèn)題,就SQL Server中數(shù)據(jù)完整性的類(lèi)型和實(shí)現(xiàn)作了闡述,并結(jié)合一個(gè)應(yīng)用實(shí)例進(jìn)行了示范。

關(guān)鍵詞:數(shù)據(jù)完整性;域完整性;實(shí)體完整性;引用完整性;用戶(hù)定義完整性

中圖分類(lèi)號(hào):TP311.13文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):16723198(2009)22025902お

數(shù)據(jù)完整性是關(guān)系數(shù)據(jù)庫(kù)模型中數(shù)據(jù)安全的重要組成部分,能夠避免破壞數(shù)據(jù)項(xiàng)之間的結(jié)構(gòu),維持?jǐn)?shù)據(jù)的正確性、一致性和有效性,保持同一數(shù)據(jù)的不同副本協(xié)調(diào)一致,從而可以極大地提高數(shù)據(jù)的可用性。數(shù)據(jù)完整性的控制機(jī)制一般包括三個(gè)方面內(nèi)容:數(shù)據(jù)語(yǔ)義約束條件的定義;約束條件的檢查;違背約束條件時(shí)系統(tǒng)的異常處理。

1 數(shù)據(jù)完整性類(lèi)型

(1)域完整性。對(duì)表字段取值進(jìn)行約束,提供了一個(gè)給定域的有效入口,包括數(shù)據(jù)類(lèi)型、取值范圍、格式、精度等的規(guī)定,例如設(shè)定學(xué)號(hào)必須全是數(shù)字等,因此保證了一個(gè)數(shù)據(jù)庫(kù)不可能包含任何無(wú)意義的或者不合理的值。

(2)實(shí)體完整性。以表記錄為單位進(jìn)行約束,規(guī)定一個(gè)表中的每一行必須是唯一的。開(kāi)發(fā)者需要指定一個(gè)表中的一列或一組列作為它的主鍵,表中的每行必須含有一個(gè)唯一的主鍵。主鍵首先不能為空值(NULL),其次不能與表中已有行的主鍵值相同。

(3)引用完整性。定義一個(gè)關(guān)系數(shù)據(jù)庫(kù)中不同的列和不同的表之間的關(guān)系,一列或一組列中的值引用相關(guān)的一列或一組列中的值,必須要與相關(guān)的一列或一組列中的值相匹配。從屬的一列或一組列稱(chēng)作外鍵,被引用的列或一組列稱(chēng)作父鍵。父鍵必須是一個(gè)主鍵或唯一值鍵,若父鍵和外鍵屬于同一個(gè)表,則稱(chēng)作自引用完整性。

(4)用戶(hù)定義完整性。以上三種數(shù)據(jù)完整性約束能夠?qū)崿F(xiàn)數(shù)據(jù)庫(kù)中大部分?jǐn)?shù)據(jù)完整性,但總有一些約束條件是開(kāi)發(fā)者不能應(yīng)用以上數(shù)據(jù)完整性約束來(lái)實(shí)行的。如入學(xué)時(shí)間不能晚于畢業(yè)時(shí)間;又如當(dāng)某一學(xué)生記錄從學(xué)生簡(jiǎn)歷中被刪除時(shí),需要同時(shí)在歷史表中登記被刪除的學(xué)生記錄。實(shí)現(xiàn)諸如此類(lèi)的數(shù)據(jù)完整性保護(hù),需要開(kāi)發(fā)者自己通過(guò)創(chuàng)建存儲(chǔ)過(guò)程和觸發(fā)器等來(lái)實(shí)現(xiàn)。我們把這類(lèi)完整性約束稱(chēng)為用戶(hù)定義完整性。

2 數(shù)據(jù)完整性的實(shí)現(xiàn)

(1)聲明型數(shù)據(jù)完整性:作為數(shù)據(jù)庫(kù)說(shuō)明的一部分在數(shù)據(jù)庫(kù)定義中實(shí)現(xiàn),通過(guò) CREATE TABLE和ALTER TABLE語(yǔ)句中使用表約束或列約束的方式來(lái)限制表中的值。這種方法實(shí)現(xiàn)數(shù)據(jù)完整性簡(jiǎn)單,而且不容易出錯(cuò),可以直接將數(shù)據(jù)完整性的要求定義在表和列上。這種方法可以實(shí)現(xiàn)數(shù)據(jù)的實(shí)體完整性與參照完整性,部分實(shí)現(xiàn)域完整性與用戶(hù)定義完整性。

(2)過(guò)程型數(shù)據(jù)完整性:主要指通過(guò)缺省、規(guī)則和觸發(fā)器,或視圖和存儲(chǔ)過(guò)程實(shí)現(xiàn)。這一類(lèi)完整性實(shí)現(xiàn)相對(duì)來(lái)說(shuō)較復(fù)雜,但是具有更大的靈活性。主要用于實(shí)現(xiàn)域完整性與用戶(hù)完整性。

2.1 域完整性的實(shí)現(xiàn)

(1)缺省值(default constraint)約束:它與列值相關(guān)聯(lián),而不是與數(shù)據(jù)類(lèi)型相關(guān)聯(lián),可以為任何數(shù)據(jù)類(lèi)型(除timestamp和具有identity屬性的列外)定義缺省值約束。

(2)檢查(check)約束:它限制輸入到一列或多列中的可能值,從而保證SQL Server數(shù)據(jù)庫(kù)中數(shù)據(jù)的域完整性,在check約束中可以包含搜索條件,但是不能包含子查詢(xún),一個(gè)表中可以包含多個(gè)check約束,對(duì)于列也可以定義多個(gè)check約束。

(3)缺省(default):缺省是一種數(shù)據(jù)庫(kù)對(duì)象,它與缺省值約束的作用類(lèi)似,為INSERT 語(yǔ)句中未指定數(shù)據(jù)的列設(shè)置缺省值,缺省對(duì)象只適用受INSERT語(yǔ)句影響的行。定義缺省的格式為:

CREATE DEFAULT [owner] default_name AS constant_expression

其中default_name是新建的缺省的名字,constant_expression是一個(gè)常量表達(dá)式,在這個(gè)表達(dá)式中不包含有任何列名或其它數(shù)據(jù)庫(kù)對(duì)象名,但可使用不涉及數(shù)據(jù)庫(kù)的SQL Server內(nèi)部函數(shù)。

缺省創(chuàng)建后,使用系統(tǒng)存儲(chǔ)過(guò)程sp_binddefault與表中的列捆綁,也可以與用戶(hù)定義的數(shù)據(jù)類(lèi)型捆綁,其語(yǔ)法如下:

Sp_binddefault default_name, object_name

其中object_name是要指定與該缺省相綁定的列名或用戶(hù)定義的類(lèi)型名,如果指定的是表中的列,其格式為table.column,否則被認(rèn)為是用戶(hù)定義的數(shù)據(jù)類(lèi)型名,如果名字中含有空格或標(biāo)點(diǎn)符號(hào)或是保留字,則必須用引號(hào)將它放入引號(hào)中。

(4)規(guī)則(rule):規(guī)則是數(shù)據(jù)庫(kù)對(duì)象之一,指定向某列(或用與該規(guī)則綁定的用戶(hù)定義數(shù)據(jù)類(lèi)型的所有列)插入或更新數(shù)據(jù)時(shí),限制輸入新值的取值范圍。一個(gè)規(guī)則可以是:值的清單或值的集合、值的范圍、必須滿(mǎn)足的單值條件、用LIKE子句定義的編輯掩碼等。當(dāng)數(shù)據(jù)庫(kù)中數(shù)據(jù)值被更新或插入時(shí),就要檢查新值是否遵循規(guī)則,如果不符合規(guī)則就拒絕執(zhí)行更新或插入操作。規(guī)則在實(shí)現(xiàn)功能上等同于CHECK約束。

(5)觸發(fā)器(trigger)是特定類(lèi)型的存儲(chǔ)過(guò)程,作為數(shù)據(jù)修改(增、刪、改)語(yǔ)句的一部分而在相應(yīng)操作執(zhí)行時(shí)自動(dòng)執(zhí)行,是維護(hù)數(shù)據(jù)庫(kù)完整性最強(qiáng)大的工具,能在任何情況下去維護(hù)數(shù)據(jù)的完整性,應(yīng)用程序不能繞過(guò)觸發(fā)器(除非是批量復(fù)制和TRUNCATE TABLE)不予執(zhí)行,這也正是觸發(fā)器和一般存儲(chǔ)過(guò)程的一大區(qū)別。

2.2 實(shí)體完整性的實(shí)現(xiàn)

(1)列的Identity屬性說(shuō)明為Identity的列由系統(tǒng)自動(dòng)為其賦值,并保證其值在該表中的惟一性,每一個(gè)表中只允許有一個(gè)列定義為Identity的。定義時(shí)Identity后可跟seed和increment參數(shù),前一參數(shù)表示該列的起始值,后一參數(shù)表示該列值每次的增量。

(2)主鍵(primary key)約束指定表中一列或數(shù)列作為數(shù)據(jù)表的主鍵,下面是對(duì)customers表中的customer id建立主鍵值約束。

CREATE TABLE customers (Customer_id INT Primary Key, Customer_name NVARCHAR (20), Customer_address NVARCHAR (20))

在這個(gè)customers表中customer_id的取值必須不相同且不能取空值。

(3)惟一性(unique)約束和primary key約束相類(lèi)似,定義數(shù)據(jù)列值的惟一性約束,有一行可取NULL值,并且惟一性約束在一個(gè)表中可以使用多次,而主鍵值只可以在一個(gè)表中使用一次。在缺省的情況下,惟一約束產(chǎn)生非聚簇索引,而主鍵約束產(chǎn)生聚簇索引。

2.3 參照完整性的實(shí)現(xiàn)

通過(guò)在同一個(gè)數(shù)據(jù)庫(kù)的兩個(gè)表中進(jìn)行主鍵約束和外鍵約束來(lái)實(shí)現(xiàn),參照的列和被參照的列的名字必須相同。在被參照表中,主鍵值被其它表所參照時(shí),該行不能被刪除,也不允許改變。

在參照表中,不允許參照不存在的主鍵值。下面例子在定義了orders表的customer_id列參照customers中的customer_id列。

CREATE TABLE orders(Order_id INT Primary Key,Customer_id INT RETERENCES customers(customer_id),Order_date DATETIME)

主站蜘蛛池模板: 国产精品蜜臀| 国产精品一区在线观看你懂的| 伊人丁香五月天久久综合| 国产高清在线观看91精品| 亚洲国产成人精品无码区性色| 国产哺乳奶水91在线播放| 国产精品yjizz视频网一二区| 国产精品丝袜在线| 亚洲精品第一在线观看视频| 视频一区视频二区中文精品| 国产成人永久免费视频| 精品一区二区三区无码视频无码| 亚洲毛片一级带毛片基地| 久久狠狠色噜噜狠狠狠狠97视色| 亚洲黄网视频| 国产真实乱子伦精品视手机观看 | 欧美天堂久久| 国产黑人在线| 2020精品极品国产色在线观看| 亚洲美女一区二区三区| 乱系列中文字幕在线视频 | 欧美成人aⅴ| 91在线无码精品秘九色APP| 香蕉伊思人视频| 丁香五月亚洲综合在线| 伊人久久综在合线亚洲91| 99爱在线| 欧美精品成人一区二区视频一| 国产日韩欧美在线视频免费观看 | 亚洲欧洲国产成人综合不卡| 久久久久久久蜜桃| 青青操国产| 久久综合丝袜日本网| 亚洲美女操| 中国一级特黄视频| 国产在线精品香蕉麻豆| 亚洲成人精品| 国产视频你懂得| 中文字幕在线观| 亚洲欧美日韩视频一区| 一级不卡毛片| 欧美成人第一页| 亚洲精品免费网站| 色综合天天娱乐综合网| 日韩黄色精品| 麻豆国产在线观看一区二区| 久久香蕉国产线看精品| 日本午夜影院| 日韩精品一区二区三区视频免费看| 亚洲中文字幕在线精品一区| 久996视频精品免费观看| 99热这里都是国产精品| 亚洲色图在线观看| 国产精品hd在线播放| 丝袜久久剧情精品国产| 五月婷婷丁香色| 色婷婷综合在线| 亚洲欧美日韩精品专区| 精品国产成人av免费| 国产99精品视频| 国内黄色精品| 美女高潮全身流白浆福利区| 亚洲第一区在线| 免费观看无遮挡www的小视频| 激情视频综合网| 国产精品亚洲精品爽爽| 亚洲九九视频| 成人午夜天| 伊人精品成人久久综合| 亚洲一级毛片在线观播放| 久久亚洲AⅤ无码精品午夜麻豆| 超薄丝袜足j国产在线视频| 欧美亚洲中文精品三区| 久久久久久尹人网香蕉| 伊人色在线视频| 日韩人妻精品一区| 精品综合久久久久久97超人该| 狠狠久久综合伊人不卡| 国产亚洲欧美日韩在线一区二区三区| 国产美女精品一区二区| 国产高颜值露脸在线观看| 综合色区亚洲熟妇在线|