數(shù)據(jù)庫(kù)完整性_第1頁(yè)
數(shù)據(jù)庫(kù)完整性_第2頁(yè)
數(shù)據(jù)庫(kù)完整性_第3頁(yè)
數(shù)據(jù)庫(kù)完整性_第4頁(yè)
數(shù)據(jù)庫(kù)完整性_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五章數(shù)據(jù)庫(kù)完整性AnIntroductiontoDatabaseSystem復(fù)習(xí):完整性約束條件三類(lèi)完整性:實(shí)體完整性參照完整性用戶自定義的完整性六種約束條件主鍵約束外鍵約束唯一性約束檢查約束默認(rèn)值約束空值約束AnIntroductiontoDatabaseSystem數(shù)據(jù)完整性

數(shù)據(jù)的完整性數(shù)據(jù)庫(kù)的完整性是指數(shù)據(jù)的正確性和相容性。完整性VS

安全性(兩個(gè)不同的概念)數(shù)據(jù)完整性是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),即防止數(shù)據(jù)庫(kù)中存在不正確的數(shù)據(jù)。防范的對(duì)象是不合語(yǔ)義的、不正確的數(shù)據(jù)。數(shù)據(jù)安全性是保護(hù)數(shù)據(jù)庫(kù)防止惡意的破壞和非法的存取。防范的對(duì)象是非法用戶和非法操作。AnIntroductiontoDatabaseSystem數(shù)據(jù)庫(kù)完整性

為維護(hù)數(shù)據(jù)庫(kù)的完整性,DBMS必須:1.提供定義完整性約束條件的機(jī)制2.提供完整性檢查的方法3.違約處理實(shí)體完整性參照完整性用戶自定義的完整性拒絕級(jí)聯(lián)設(shè)置為空值A(chǔ)nIntroductiontoDatabaseSystem第五章數(shù)據(jù)庫(kù)完整性5.1實(shí)體完整性5.2參照完整性5.3用戶定義的完整性5.4完整性約束命名字句5.5觸發(fā)器5.6小結(jié)第一講AnIntroductiontoDatabaseSystem5.1實(shí)體完整性5.1.1實(shí)體完整性定義回憶定義?關(guān)系數(shù)據(jù)庫(kù)的實(shí)體完整性的定義,有兩種方式:①創(chuàng)建表時(shí):PrimaryKey【單/多屬性構(gòu)成主鍵問(wèn)題】②修改表定義時(shí):添加PrimaryKey約束具體實(shí)例參照:P152AnIntroductiontoDatabaseSystem5.1實(shí)體完整性5.1.2實(shí)體完整性檢查和違約處理當(dāng)對(duì)關(guān)系定義主碼后,每當(dāng)用戶程序?qū)颈硖砑佑涗浕蚋轮鞔a鍵值時(shí),RDBMS將按照實(shí)體完整性規(guī)則自動(dòng)檢查記錄的完整性:①主碼值是否唯一,如果不唯一則拒絕此次操作。②主碼的各個(gè)屬性(主屬性)是否為空,如果有一個(gè)為空則拒絕此次操作。并且現(xiàn)行的RDBMS會(huì)給出相應(yīng)的錯(cuò)誤提示。AnIntroductiontoDatabaseSystem5.1實(shí)體完整性5.1.2實(shí)體完整性檢查和違約處理核查記錄主碼值是否唯一的方法:全表掃描,即依次判斷表中的每一條記錄的主碼值是否與即將插入的記錄主碼值重復(fù)。(教材P153頁(yè))全表掃描一般情況是十分耗時(shí),尤其在數(shù)據(jù)記錄量較多的情況下。為了避免全表掃描,RDBMS核心一般都在主碼字段自動(dòng)建立B+樹(shù)的聚簇索引,從而提高檢索效率!如何保證?回憶:RDBMS默認(rèn)會(huì)為主碼上建立一個(gè)聚簇索引!AnIntroductiontoDatabaseSystem5.2參照完整性5.2.1參照完整性定義5.2.2參照完整性檢查和違約處理關(guān)系數(shù)據(jù)庫(kù)的參照完整性在創(chuàng)建表或修改表時(shí),使用ForeignKey

短語(yǔ)定義哪些列為外鍵,用References短語(yǔ)指明這些外碼參照哪些表的主碼。示例:P154參照完整性定義完畢,該約束就將相關(guān)聯(lián)的兩個(gè)表中的相應(yīng)的元組聯(lián)系起來(lái)了,因此為保證數(shù)據(jù)的有效性,必須對(duì)相關(guān)的更新操作(增、刪、改)進(jìn)行完整性檢查?;貞浂x?AnIntroductiontoDatabaseSystem5.2參照完整性5.2.2參照完整性檢查和違約處理可能破壞參照完整性的情況及違約處理被參照表(Student表)參照表(SC表)違約處理可能破壞參照完整性插入元組拒絕可能破壞參照完整性修改外碼值拒絕刪除元組可能破壞參照完整性拒絕/級(jí)連刪除/設(shè)置為空值修改主碼值可能破壞參照完整性拒絕/級(jí)連修改/設(shè)置為空值如果為定義參照完整性違反策略,當(dāng)違反參照完整性時(shí),系統(tǒng)選擇默認(rèn)策略;如果想讓系統(tǒng)采用其他策略則必須顯式說(shuō)明。AnIntroductiontoDatabaseSystem5.2參照完整性5.2.2參照完整性檢查和違約處理參照完整性違約處理策略:1拒絕(NoAction)執(zhí)行該策略一般設(shè)置為各個(gè)RDBMS的默認(rèn)策略。2級(jí)聯(lián)(Cascade)操作自動(dòng)刪除或更新參照表的所有相關(guān)聯(lián)的記錄。3設(shè)置為空值主要涉及參照表中的相應(yīng)字段是否允許空值的考慮。AnIntroductiontoDatabaseSystem5.2參照完整性舉例:定義成績(jī)表,并顯式設(shè)置其參照完整性違約策略。AnIntroductiontoDatabaseSystem5.3用戶定義的完整性用戶定義的完整性就是針對(duì)某一具體應(yīng)用的數(shù)據(jù)必須滿足的語(yǔ)義要求。目前的RDBMS都提供了定義和檢查用戶自定義完整的機(jī)制,而不必由應(yīng)用程序承擔(dān)。SQLServer中提供完整性機(jī)制常用的方法:唯一性約束(Unique)檢查(Check)約束:約束字段只涉及一個(gè)表時(shí)非常有效默認(rèn)值約束(Default)空值約束(NotNull)存儲(chǔ)過(guò)程和觸發(fā)器:涉及多個(gè)表多個(gè)字段維護(hù)時(shí)非常有效AnIntroductiontoDatabaseSystem5.3用戶定義的完整性用戶自定義完整性約束條件的定義用戶自定義完整性約束條件檢查和違約處理說(shuō)明:(1)如果約束涉及單個(gè)屬性列,可以定義在列級(jí),也可定義在表級(jí)

(2)如果約束涉及多個(gè)屬性列,只能定義在表級(jí)拒絕執(zhí)行!AnIntroductiontoDatabaseSystem5.3用戶定義的完整性習(xí)題:1定義圖書(shū)信息表:Book

BookID:圖書(shū)編號(hào)、主鍵、Char(8)

BookName

圖書(shū)名稱(chēng)、非空、nvarchar(20)

BookISBN

圖書(shū)ISBN號(hào)碼、唯一、varchar(18)

Price圖書(shū)單價(jià)、要求在0~200元之間、decimal(5,2)AnIntroductiontoDatabaseSystem5.3用戶定義的完整性習(xí)題:2定義讀者信息表:ReaderRID:讀者編號(hào)、主鍵、Char(6)

RName:讀者姓名、非空、nvarchar(10)

RSex:性別(只能取‘男’和‘女’)、nchar(1)

RCardNo:身份證編號(hào)(唯一且滿足公認(rèn)的條件:性別為男,倒數(shù)第2位是單數(shù),否則相反)、char(18)AnIntroductiontoDatabaseSystem5.3用戶定義的完整性習(xí)題:3定義借閱信息表:BorrowRID參照讀者信息表的RID取值

BookID

參照?qǐng)D書(shū)信息表的BookID取值

BDate

借閱日期、Datetime

RDate

歸還日期:不能在借閱日期之前假設(shè)允許續(xù)借圖書(shū),試分析本表的主鍵,并完成主鍵、外鍵和用戶自定義完整性設(shè)置。AnIntroductiontoDatabaseSystem5.4完整性約束命名子句SQL在創(chuàng)建和修改表定義的語(yǔ)句中,提供了完整性約束命名子句Constraint,用來(lái)對(duì)完整性約束命名。修改表中完整性限制第三章數(shù)據(jù)定義部分:AlterTable

語(yǔ)句的Add/Drop

約束子句個(gè)人認(rèn)為:對(duì)于:非空、默認(rèn)值、唯一約束,這三種約束可直接定義對(duì)于:主鍵、外鍵、Check約束、為了便于維護(hù),最好在創(chuàng)建約束時(shí)采用約束命名機(jī)制。AnIntroductiontoDatabaseSystem5.4完整性約束命名子句約束簡(jiǎn)寫(xiě)_表名_約束的列名約束的命名約定例子:

DF_TableB_age

FK_TableB_pno試說(shuō)出它們表示的含義?AnIntroductiontoDatabaseSystem5.6觸發(fā)器轉(zhuǎn)入觸發(fā)器專(zhuān)題知識(shí)章節(jié)請(qǐng)首先學(xué)習(xí)SQL語(yǔ)言程序流程控制結(jié)構(gòu)后AnIntroductiontoDatabaseSystem5.6SQL流程控制語(yǔ)句

IF…ELSE語(yǔ)句

While…Continue…Break

Begin…End--語(yǔ)句塊的開(kāi)始和結(jié)束標(biāo)志用戶在程序設(shè)計(jì)語(yǔ)言時(shí),常常需要利用各種流程控制語(yǔ)句,改變計(jì)算機(jī)的執(zhí)行流程,以滿足程序設(shè)計(jì)的需要。AnIntroductiontoDatabaseSystem5.6SQL流程控制語(yǔ)句

IF…ELSE語(yǔ)句

在程序設(shè)計(jì)中,如果需要對(duì)給定的條件進(jìn)行判斷,然后根據(jù)條件的真假選擇不同的執(zhí)行路徑時(shí)采用該語(yǔ)句。語(yǔ)法格式:

IF

條件表達(dá)式

{單個(gè)SQL語(yǔ)句或者Begin-End語(yǔ)句塊}[ELSE{單個(gè)SQL語(yǔ)句或者Begin-End語(yǔ)句塊}]提示:如果條件表達(dá)式中有Select語(yǔ)句,需要用小括號(hào)括起來(lái)TRUE/FALSEAnIntroductiontoDatabaseSystem5.6SQL流程控制語(yǔ)句

IF…ELSE語(yǔ)句例題:在學(xué)生表中查詢姓名為“王琳琳”的學(xué)生,如果存在,列示該學(xué)生的學(xué)號(hào)、姓名、性別、出生日期、所屬院系名稱(chēng)等信息;如果不存在,則打印提示信息:“不存在姓名為王琳琳的學(xué)生!”。AnIntroductiontoDatabaseSystem5.6SQL流程控制語(yǔ)句

WHILE…CONTINUE…BREAK語(yǔ)句語(yǔ)法格式:WhileLogical_Expression_1 Begin

語(yǔ)句塊;

[IFLogical_Expression_2 Continue;][IFLogical_Expression_3 Break;] End退出循環(huán)體退出本次循環(huán)學(xué)號(hào)自動(dòng)生成循環(huán)更新簡(jiǎn)歷數(shù)據(jù)AnIntroductiontoDatabaseSystem5.6SQL流程控

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論