




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第三章數(shù)據(jù)庫完整性和索引3.1數(shù)據(jù)完整性的概述一、數(shù)據(jù)完整性的定義數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確性和可靠性。定義數(shù)據(jù)完整性的目的:
1、防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù);
2、防止錯誤信息的輸入和輸出而造成無效操作;3.1數(shù)據(jù)完整性的概述二、數(shù)據(jù)完整性分類1、實體完整性(EntityIntegrity)
將數(shù)據(jù)表中的每一行看作一個實體,所有行具有非空且沒有重復(fù)的標(biāo)識字段。實現(xiàn)手段:唯一索引、主鍵約束、唯一約束、列的Identity屬性限制3.1數(shù)據(jù)完整性的概述二、數(shù)據(jù)完整性分類
2、域完整性(DomainIntegrity)
域(或列)完整性是指定列指定一組有效的值并決定是否可為空值。實現(xiàn)手段:
1.數(shù)據(jù)類型或是NOTNULL;
2.檢查約束和規(guī)則;
3.外鍵約束、默認(rèn)值等規(guī)則限制。3.1數(shù)據(jù)完整性的概述二、數(shù)據(jù)完整性分類3、參照完整性(ReferentialIntegrity)
參照完整性確保主鍵(在被引用表中)和外鍵(在引用表中)之間的關(guān)系得到保持。
例如修改父表中關(guān)鍵字值后,子表關(guān)鍵字值未做相應(yīng)改變;刪除父表的某記錄后,子表的相應(yīng)記錄未刪除,致使這些記錄稱為孤立記錄;對于子表插入的記錄,父表中沒有相應(yīng)關(guān)鍵字值的記錄;3.2約束學(xué)號姓名專業(yè)性別出生時間990201王俊鵬計算機男1983/10/1990202王巍計算機女1987/9/5990203李海燕計算機女1985/4/3學(xué)號課程號成績學(xué)分990201101804990201102902990202201784990202202954990203101882主鍵外鍵被引用表引用表學(xué)生信息表學(xué)生課程表3.1數(shù)據(jù)完整性的概述二、數(shù)據(jù)完整性分類4、用戶定義的完整性(User-definedIntegrity)用戶自定義完整性指針對某一具體關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。
3.1數(shù)據(jù)完整性的概述二、實施數(shù)據(jù)完整性的方法1、用定義約束實現(xiàn)數(shù)據(jù)完整性通過針對表和字段定義聲明的約束,將數(shù)據(jù)完整性成為數(shù)據(jù)定義的一部分,使用約束實現(xiàn)數(shù)據(jù)完整性。2、用編寫程序?qū)崿F(xiàn)數(shù)據(jù)完整性可以使用存儲過程或觸發(fā)器實施程序化數(shù)據(jù)完整性。3、選取數(shù)據(jù)完整性的實施方法由于約束在SQLSERVER的可執(zhí)行部分有一段代碼路徑,執(zhí)行速度比其它方式快,所以應(yīng)優(yōu)先選用約束。需要在多個表之間保持?jǐn)?shù)據(jù)的一致性,可選擇使用約束中的主鍵和外鍵約束;需要特別復(fù)雜的完整性檢驗,則使用觸發(fā)器和存儲過程
3.2約束一、
主鍵約束(PrimaryKeyConstraint)1、主鍵約束:主鍵是能夠唯一標(biāo)識表中某一行的屬性或?qū)傩越M。語法:[CONSTRAINT約束名]PRIMARYKEY[CLUSTERED|NONCLUSTERED]{(列[,...n])}應(yīng)用PRIMARYKEY約束的注意事項
1、每張表只能有一個PRIMARYKEY約束2、輸入的值必須是惟一的3、不允許空值4、將在指定列上創(chuàng)建惟一索引PRIMARYKEY約束(續(xù))PRIMARYKEY約束示例在Customers表上創(chuàng)建PRIMARYKEY約束,指明表的主鍵值是CustomerID,并且創(chuàng)建非聚集索引以強制約束4.4.3PRIMARYKEY約束USENorthwindALTERTABLEdbo.Customers
ADDCONSTRAINTPK_CustomersPRIMARYKEYNONCLUSTERED(CustomerID)排序規(guī)則指定表示每個字符的位模式以及存儲和比較字符所使用的規(guī)則。
Collate是一個子句,可應(yīng)用于數(shù)據(jù)庫定義或列定義以定義排序規(guī)則,或應(yīng)用于字符串表達(dá)式以應(yīng)用排序規(guī)則投影。語法:Collatecollation_name
排序規(guī)則排序規(guī)則名稱由兩部份構(gòu)成,前半部份是指本排序規(guī)則所支持的字符集。
如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指針對大陸簡體字UNICODE的排序規(guī)則。
排序規(guī)則的后半部份即后綴含義:
_BIN二進(jìn)制排序
_CI(CS)是否區(qū)分大小寫,CI不區(qū)分,CS區(qū)分
_AI(AS)是否區(qū)分重音,AI不區(qū)分,AS區(qū)分
區(qū)分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。
區(qū)分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字母視為不等。3.2約束二、外鍵約束(ForeignKeyConstraint)1、外鍵約束:定義外鍵的目的是在于限制可以保存在外鍵所在表中的數(shù)據(jù)。外鍵由一個列或多個列的組合構(gòu)成,用來實現(xiàn)兩張表之間的數(shù)據(jù)聯(lián)系,維護(hù)兩個表間的一致性關(guān)系。語法:[CONSTRAINT約束名][FOREIGNKEY][(列[,…n])]
REFERENCES引用表
[(引用列
[,…n])]3.2約束學(xué)號姓名專業(yè)性別出生時間990201王俊鵬計算機男1983/10/1990202王巍計算機女1987/9/5990203李海燕計算機女1985/4/3學(xué)號課程號成績學(xué)分990201101804990201102902990202201784990202202954990203101882主鍵外鍵主表從表學(xué)生信息表學(xué)生課程表2、外鍵約束注意要點創(chuàng)建外鍵約束的前提是完成主表的主鍵定義;外鍵約束允許存在NULL值;外鍵約束不能用于臨時表和不同的數(shù)據(jù)庫之間。FOREIGNKEY約束(續(xù))FOREIGNKEY約束的示例使用FOREIGNKEY約束,確保Orders表中的客戶標(biāo)識與Customers表中的有效的客戶標(biāo)識相關(guān)聯(lián)USENorthwindALTERTABLEdbo.Orders
ADDCONSTRAINTFK_Orders_CustomersFOREIGNKEY(CustomerID)REFERENCESdbo.Customers(CustomerID)3.2約束三、惟一約束(UniqueConstraint)1、惟一約束:
在表指定的列或組列上不允許兩行是具有重復(fù)值時,則需要該列或組列上指定UNIQUE完整性約束。在UNIQUE約束定義中的列或組列稱為唯一碼。2、主鍵與UNIQUE約束的區(qū)別主要為:
UNIQUE約束,主要用在非主鍵的一列或多列上要求數(shù)據(jù)惟一的情況。
UNIQUE約束,允許該列上存在NULL值,而主鍵不允許??稍诒碇性O(shè)置多個UNIQUE約束,而在只能設(shè)置一個主鍵約束。應(yīng)用UNIQUE約束的注意事項應(yīng)用UNIQUE約束的注意事項允許一個空值在一個表上允許多個UNIQUE約束可在一個或者多個列上定義是通過一個惟一索引強制約束的3.2約束3、創(chuàng)建惟一約束的方法:
(1)使用SSMS創(chuàng)建惟一約束“對象資源管理器”右擊表名稱,選擇快捷菜單中的“修改”,進(jìn)入表結(jié)構(gòu)修改狀態(tài)。單擊工具欄處“管理索引和鍵”按鈕(2)使用Transact-SQL語言創(chuàng)建惟一約束方法一:在創(chuàng)建表結(jié)構(gòu)的同時創(chuàng)建惟一約束,語法格式為:
CREATETABLE表名稱(字段定義,CONSTRAINT約束名UNIQUE(列名))方法二:在已經(jīng)建立結(jié)構(gòu)的表定義中添加惟一約束,語法格式:ALTERTABLE表名稱ADDCONSTRAINT約束名UNIQUE(字段名)3.2約束四、檢查約束(CheckConstraint)1、檢查約束:
限制輸入到一列或多列中的可能值,它通過檢查輸入表列的數(shù)據(jù)的值來維護(hù)值域的完整性。注意:1、一個表可以定義多個檢查約束,但每個建庫命令只能為每列定義一個檢查約束;2、在每次插入記錄或是修改記錄時,檢查約束會做相應(yīng)檢查;3、自動編號字段不能應(yīng)用檢查約束。應(yīng)用CHECK約束的注意事項在每次執(zhí)行INSERT或者UPDATE語句的時候校驗數(shù)據(jù)值可以引用同表中的其他列不能包含子查詢列級CHECK約束可省略名字,讓系統(tǒng)自動生成表達(dá)式可以用AND以及OR連接以表示復(fù)雜邏輯表級CHECK約束可引用同行中的多列,但不能跨行或跨表可用CHECK約束來防止輸入NULL值,例如CHECK(輸入值
ISNOTNULL)3.2約束(2)使用Transact-SQL語言創(chuàng)建方法一:建立表結(jié)構(gòu)同時創(chuàng)建檢查約束,語法格式:CREETETABLE表名稱(字段定義,CONSTRAINT約束名CHECK
邏輯表達(dá)式)
方法二:表建立后增加檢查約束,語法格式如下:ALTERTABLE表名稱ADDCONSTRAINT約束名CHECK
邏輯表達(dá)式3.2約束【例3.11】在CJGL數(shù)據(jù)庫中為XS表字段XB(性別)設(shè)置檢查約束,要求XB字段值只能為“男”和“女”。
ALTERTABLEXSADDCONSTRAINTCK_XBCHECK性別IN(‘男’,’女’)禁用約束當(dāng)在表上添加約束的時候,我們可以禁用對已有數(shù)據(jù)的約束檢查
語法:ALTERTABLE表名[WITHCHECKWITHNOCHECK]ADDCONSTRAINT約束名[FOREIGNKEY][(column[,…n])]REFERENCES引用表
[(引用列[,…n])][CHECK(搜索條件)]
禁用現(xiàn)有數(shù)據(jù)上的約束檢查(續(xù))對已有數(shù)據(jù)禁用約束檢查的注意事項只能禁用CHECK和FOREIGNKEY約束當(dāng)為一個已有數(shù)據(jù)的表添加CHECK或FOREIGNKEY約束的時候,使用WITHNOCHECK選項來禁用對已有數(shù)據(jù)的約束檢查當(dāng)現(xiàn)有數(shù)據(jù)不再變化的時候,使用WITHNOCHECK選項。若數(shù)據(jù)被更新,則它的新值必須符合CHECK約束確定禁用約束檢查是恰當(dāng)?shù)?。在決定添加約束前,可修改現(xiàn)有數(shù)據(jù)在加載新數(shù)據(jù)時禁用約束檢查為了避免約束檢查的開銷,有時候可能希望禁用約束已經(jīng)確保數(shù)據(jù)符合約束數(shù)據(jù)并不符合約束,但稍后可以更改其值并重用約束語法:ALTERTABLE表名{CHECK|NOCHECK}CONSTRAINT{ALL|約束名[,...n]}查看約束是啟用還是禁用的狀態(tài)系統(tǒng)存儲過程sp_help系統(tǒng)函數(shù)OBJECTPROPERTY的CnstIsDisabled
屬性3.2約束五、默認(rèn)值約束(DefaultConstraint)1、默認(rèn)值約束:可用于給列賦予一個常量值,用戶在插入新的數(shù)據(jù)行時,系統(tǒng)將默認(rèn)該列以常量值為指定數(shù)據(jù)。注意:默認(rèn)值可以是常量、函數(shù)、空值(NULL)等。2、創(chuàng)建默認(rèn)值約束的方法(1)使用SSMS創(chuàng)建默認(rèn)值約束(2)使用Transact-SQL語言DEFAULT約束如果一個列的值在INSERT語句中沒有指定,DEFAULT約束將自動輸入一個值,可以是預(yù)先指定的常量、NULL或者一個系統(tǒng)函數(shù)運行時的值
語法:[CONSTRAINT約束名]DEFAULT約束表達(dá)式
創(chuàng)建DEFAULT約束的兩種方法創(chuàng)建一個默認(rèn)(CREATEDEFAULT),然后使用存儲過程sp_bindefault
將默認(rèn)綁定到一個列CREATETABLE或ALTERTABLE時使用DEFAUTL約束應(yīng)用DEFAULT約束的注意事項DEFAULT約束創(chuàng)建時將檢查表中的現(xiàn)存數(shù)據(jù)DEFAULT約束只對INSERT語句有效每列只能定義一個DEFAULT約束DEFAULT約束使用注意事項有可能會和CHECK約束沖突為具有PRIMARYKEY或UNIQUE約束的列指定默認(rèn)值是沒有意義的常量值外面可以加或者不加括號,字符或者日期常量必須加上單引號或雙引號3.2約束六、約束管理1、查看約束SP_HELPCONSTRAINT表名稱2、刪除約束ALTERTABLE表名稱
DROPCONSTRAINT約束名決定使用何種約束完整性類型約束類型描述域DEFAULT如果在INSERT語句中未顯式提供
值,則指定為列提供的值CHECK指定列中可接受的數(shù)據(jù)值實體PRIMARYKEY惟一標(biāo)識每一列,確保用戶沒有輸入重復(fù)的值。同時創(chuàng)建一個索引以增強性能。不允許空值UNIQUE確保在非主鍵列中不輸入重復(fù)值,并創(chuàng)建一個索引以增強性能。允許空值引用FOREIGNKEY定義一列或多列的值與同表或其他表中主鍵的值匹配CHECK基于同表中其他列的值,指定列中可接受的數(shù)據(jù)值使用約束的注意事項可直接在表上創(chuàng)建、更改和刪除約束,而不必刪除并重建表SQLServer里的約束只是“最后防線”當(dāng)給一個表添加約束的時候,SQLServer將檢查現(xiàn)有數(shù)據(jù)是否違反約束建議創(chuàng)建約束的時候指定名稱,否則系統(tǒng)將為約束自動產(chǎn)生一個復(fù)雜的名稱名稱必須惟一,且符合SQLServer標(biāo)識符的規(guī)則查看約束的信息系統(tǒng)存儲過程:sp_helpconstraint、sp_help創(chuàng)建約束使用CREATETABLE或者ALTERTABLECREATETABLE是在創(chuàng)建表時創(chuàng)建約束ALTERTABLE是在一個已有的表上創(chuàng)建約束可以添加約束到已有數(shù)據(jù)的表上可添加單列或多列約束若約束應(yīng)用于單列,稱為列級約束若約束引用了多列,稱為表級約束,即使它并沒有引用表中的所有列3.3索引一、索引的作用與類型1、索引的作用索引是一個再表或視圖上創(chuàng)建的對象,當(dāng)用戶查詢索引字段時,它可以快速實施數(shù)據(jù)檢索操作。借助索引,執(zhí)行查詢時不必掃描整個表就能夠快速找到所需要的數(shù)據(jù)。注意:(1)可以在那些經(jīng)常被用來查詢的列上建立索引,以提高查找效率?!纠印吭赟tudent表中可以分別建立基于學(xué)號、姓名的索引(2)索引將占用磁盤空間,并且降低添加、刪除和更新行的速度,所以要慎用!貨號貨名規(guī)格3002CPU處理器SY88001002計算機LX1003計算機FZ1001計算機LC2002顯示器172001顯示器153001CPU處理器P44001內(nèi)存儲器2564002內(nèi)存儲器512索引編號指針地址100141002210033200162002530017300214001840029表與索引示例索引的類型2、索引的類型(1)簇索引(CLUSTEREDINDEX)簇索引又稱聚集索引。簇索引在數(shù)據(jù)表中按照索引列的排序規(guī)則排列數(shù)據(jù)的物理順序。(2)非簇索引(NONCLUSTEREDINDEX)非簇索引是具有與表的數(shù)據(jù)完全分離的結(jié)構(gòu),它不會改變行的物理存儲順序,但是它是由數(shù)據(jù)行指針和一個索引值構(gòu)成的。(3)唯一索引(UNIQUEINDEX)唯—索引可以確保所有數(shù)據(jù)行中任意兩行的被索引列不包括NULL在內(nèi)的重復(fù)值。每個表只能有一個簇索引,因為一個表中的記錄只能以一種物理順序存放。但是,一個表可以有不止一個非簇索引。
從建立了簇索引的表中取出數(shù)據(jù)要比建立了非聚簇索引的表快。非簇索引需要大量的硬盤空間和內(nèi)存。
非簇索引可以提高從表中取數(shù)據(jù)的速度,它也會降低向表中插入和更新數(shù)據(jù)的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (二模)晉中市2025年3月高考適應(yīng)性訓(xùn)練考試 地理試卷(含A+B卷答案詳解)
- 2025年初中人教版八年級上冊第二章第二節(jié)聲音的特性說課稿
- 4.2《光的反射》說課稿 2025年初中 人教版物理八年級上冊
- 【東吳證券】AI+服務(wù)消費專題報告:AI在各消費場景的落地空間-進(jìn)展幾何
- 理付款授權(quán)委托書
- 新能源申請電表委托書
- 研發(fā)中心裝修保修合同樣本
- 農(nóng)業(yè)人才培養(yǎng)與引進(jìn)發(fā)展方案
- 工廠光伏太陽能發(fā)電
- 施工現(xiàn)場安全隱患整改方案
- 第三單元名著閱讀《經(jīng)典常談》-2023-2024學(xué)年八年級語文下冊同步教學(xué)課件
- 排污許可證申請與核發(fā)技術(shù)規(guī)范 火電(二次征求意見稿)
- QB-T 2673-2023 鞋類產(chǎn)品標(biāo)識
- 鄰近鐵路營業(yè)線施工安全監(jiān)測技術(shù)規(guī)程 (TB 10314-2021)
- 《中國帕金森病診療指南(第四版)》(2023)要點
- 2024年揚州市職業(yè)大學(xué)高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 2024年北京京北職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 流感病人護(hù)理版
- 中學(xué)生睡眠質(zhì)量研究性學(xué)習(xí)報告
- 酒店水單賬單范本
- 空壓機(儲氣罐)日常安全檢查表
評論
0/150
提交評論