第8章關(guān)系完整性_第1頁
第8章關(guān)系完整性_第2頁
第8章關(guān)系完整性_第3頁
第8章關(guān)系完整性_第4頁
第8章關(guān)系完整性_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第8章 關(guān)系完整性 什么是關(guān)系完整性完整性的類型數(shù)據(jù)庫約束 返回目錄關(guān)系的完整性關(guān)系的完整性是對關(guān)系的某種約束條件,保證數(shù)據(jù)庫是對關(guān)系的某種約束條件,保證數(shù)據(jù)庫中數(shù)據(jù)的正確性與一致性中數(shù)據(jù)的正確性與一致性完整性類型完整性類型n實(shí)體完整性n參照完整性n用戶自定義完整性實(shí)體完整性與參照完整性是關(guān)系必須模實(shí)體完整性與參照完整性是關(guān)系必須模型必須滿足的約束,稱為兩個(gè)不變性型必須滿足的約束,稱為兩個(gè)不變性實(shí)體完整性實(shí)體完整性定義:若屬性定義:若屬性A是關(guān)系是關(guān)系R的主屬性,則的主屬性,則A不能取空值不能取空值保證實(shí)體集中的每個(gè)實(shí)體唯一且可標(biāo)識保證實(shí)體集中的每個(gè)實(shí)體唯一且可標(biāo)識例:例:學(xué)生實(shí)體的主屬性是學(xué)

2、號,則每個(gè)學(xué)生實(shí)體的學(xué)號都不能為空實(shí)體完整性是針對基本關(guān)系而言的,一實(shí)體完整性是針對基本關(guān)系而言的,一個(gè)關(guān)系只需要定義一個(gè)實(shí)體完整性個(gè)關(guān)系只需要定義一個(gè)實(shí)體完整性參照完整性參照完整性指關(guān)系間的引用,用來反應(yīng)關(guān)系之間的相互聯(lián)指關(guān)系間的引用,用來反應(yīng)關(guān)系之間的相互聯(lián)系系n學(xué)生(學(xué)號,姓名,性別,專業(yè)號)n專業(yè)(專業(yè)號,專業(yè)名)n學(xué)生實(shí)體中的專業(yè)號引用專業(yè)實(shí)體中的專業(yè)號n學(xué)生關(guān)系稱為參照關(guān)系,或從表,專業(yè)關(guān)系稱為被參照關(guān)系,或主表n其中學(xué)生實(shí)體中的專業(yè)號被稱為外碼(外鍵)外碼須引用被參照關(guān)系的主碼外碼須引用被參照關(guān)系的主碼參照完整性約束參照完整性約束若屬性若屬性F是基本關(guān)系是基本關(guān)系R的外碼,它與基

3、本關(guān)系的外碼,它與基本關(guān)系S中的主碼中的主碼K相對應(yīng),則對于相對應(yīng),則對于R中每個(gè)元組在中每個(gè)元組在F上上的值必須為:的值必須為:n或者空值n或者等于S中某個(gè)元組的主碼值參照完整性約束還體現(xiàn)在對主表的刪除和更新參照完整性約束還體現(xiàn)在對主表的刪除和更新操作上操作上n刪除操作:若刪除主表記錄,該記錄主碼被從表的外碼引用,則限制刪除。n級聯(lián)刪除:若刪除主表記錄,凡引用自該記錄主碼值的外碼對應(yīng)記錄也一并刪除n級聯(lián)更新:若更新主表中主碼的值記錄,凡引用自該記錄主碼值的外碼值也一并更新分析:選修(學(xué)號,課程號,成績)關(guān)系中,分析:選修(學(xué)號,課程號,成績)關(guān)系中,學(xué)號和課程號兩個(gè)外碼的取值學(xué)號和課程號兩個(gè)

4、外碼的取值課程號課程號課程名課程名學(xué)分學(xué)分01數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)402操作系統(tǒng)操作系統(tǒng)303數(shù)據(jù)庫數(shù)據(jù)庫4學(xué)號學(xué)號姓名姓名性別性別專業(yè)號專業(yè)號801吳平吳平女女10802張良張良男男20803周錦周錦女女30804林風(fēng)林風(fēng)男男20學(xué)號學(xué)號課程號課程號成績成績8010170802016580503858020690用戶自定義完整性用戶自定義完整性不同的關(guān)系型數(shù)據(jù)庫針對自身環(huán)境的不不同的關(guān)系型數(shù)據(jù)庫針對自身環(huán)境的不同,所定義的完整性同,所定義的完整性只適用于自身特定的數(shù)據(jù)庫只適用于自身特定的數(shù)據(jù)庫如某個(gè)屬性的值必須取自某一個(gè)區(qū)間,如某個(gè)屬性的值必須取自某一個(gè)區(qū)間,某個(gè)非主碼不能取空值等。某個(gè)非主碼不

5、能取空值等。SQL SERVER 數(shù)據(jù)庫完整性約束數(shù)據(jù)庫完整性約束數(shù)據(jù)完整性包括:實(shí)體完整性實(shí)體完整性域完整性域完整性參照完整性參照完整性(引用引用)用戶自定義完整性(觸發(fā)器)用戶自定義完整性(觸發(fā)器)確保數(shù)據(jù)完整性的方法主要有:約束約束規(guī)則規(guī)則觸發(fā)器觸發(fā)器實(shí)體完整性實(shí)體完整性:保證數(shù)據(jù)庫表中的每行記錄都是唯一的保證數(shù)據(jù)庫表中的每行記錄都是唯一的PRIMARY KEY PRIMARY KEY 約束約束 主鍵主鍵UNIQUE UNIQUE 約束約束唯一唯一IDENTITY IDENTITY 屬性屬性標(biāo)標(biāo)識列識列主鍵約束主鍵(PRIMARY KEY) 約束一個(gè)表中可以有一個(gè)或一個(gè)以上的列組合,這一

6、個(gè)表中可以有一個(gè)或一個(gè)以上的列組合,這些組合能惟一標(biāo)識表中的行,每個(gè)組合就是一些組合能惟一標(biāo)識表中的行,每個(gè)組合就是一個(gè)候選鍵個(gè)候選鍵數(shù)據(jù)庫管理員從候選鍵中選擇一個(gè)作為主鍵數(shù)據(jù)庫管理員從候選鍵中選擇一個(gè)作為主鍵在一個(gè)表中,不能有兩行包含相同的主鍵值。在一個(gè)表中,不能有兩行包含相同的主鍵值。不能在主鍵內(nèi)的任何列中輸入不能在主鍵內(nèi)的任何列中輸入 NULL NULL 值。值。 11-31定義主鍵主鍵的表級定義方式 create create table table Student Student ( ( sid sid intint primary keyprimary key , , s_name

7、s_name varchar(20)varchar(20) , , s_ages_age smallintsmallint , , s_sex s_sex char(2)char(2) )添加主鍵添加主鍵alter table Studentalter table Studenta add constraint pk_stud primary key dd constraint pk_stud primary key (sid);(sid);聯(lián)合主鍵prod_idfactory_idp_namepriceN124F102酸牛奶酸牛奶24.5N124F368酸牛奶酸牛奶24.5N216F102純

8、牛奶純牛奶19.0N216F247純牛奶純牛奶19.0聯(lián)合主鍵聯(lián)合主鍵:指在多個(gè)列上創(chuàng)建一個(gè)主鍵聯(lián)合主鍵的創(chuàng)建:create create table table scorescore( ( score_id score_id int not nullint not null , , sid sid intint , , score score floatfloat , , date date smalldatetimesmalldatetime , , constraint constraint pk_score pk_score primary keyprimary key ( ( sco

9、re_id,score_id, sid )sid ) )15-31主鍵的限制一張表只能有一個(gè)主鍵,但是可以創(chuàng)建聯(lián)合主鍵不能在可以為空的字段上添加主鍵主鍵所在的字段中的記錄不能為空,不能重復(fù)當(dāng)主鍵所在的列正被其他表的外鍵引用時(shí),不能被刪除16-31唯一性約束唯一(UNIQUE)性約束 UNIQUE UNIQUE 約束在列集內(nèi)強(qiáng)制執(zhí)行值的約束在列集內(nèi)強(qiáng)制執(zhí)行值的惟一性惟一性 如果用戶試圖輸入一個(gè)該列中已經(jīng)存在的值,如果用戶試圖輸入一個(gè)該列中已經(jīng)存在的值,此行將被拒絕并產(chǎn)生一個(gè)錯(cuò)誤此行將被拒絕并產(chǎn)生一個(gè)錯(cuò)誤 創(chuàng)建唯一性約束在創(chuàng)建表的同時(shí)指定唯一性約束: 給表添加唯一約束 create tablecr

10、eate table StudentStudent ( ( s_id s_id int int not nullnot null , , s_name s_name varchar(20) Uniquevarchar(20) Unique , , s_age s_age smallintsmallint , , s_sex s_sex char(2) char(2) ) ) a alter table Student lter table Student a add constraint uk_stu unique (s_name);dd constraint uk_stu unique (s

11、_name);注意事項(xiàng)一個(gè)表可以定義多個(gè) UNIQUE 約束,但只能定義一個(gè) PRIMARY KEY 約束如果該列有允許空值的約束,唯一性(UNIQUE)約束也允許空值(null)FOREIGN KEY 約束可以引用 UNIQUE 約束 標(biāo)識列(自動(dòng)增長)標(biāo)識(IDENTITY)屬性 標(biāo)識屬性用于在表中創(chuàng)建一個(gè)標(biāo)識列標(biāo)識屬性用于在表中創(chuàng)建一個(gè)標(biāo)識列IDENTITYIDENTITY ( ( seed seed , , incrementincrement ) ) seed ,increment seed ,increment 要么同時(shí)指定,要么都不指要么同時(shí)指定,要么都不指定定標(biāo)識列通常與標(biāo)識列

12、通常與 PRIMARY KEY PRIMARY KEY 約束一起用作表約束一起用作表的唯一行標(biāo)識符的唯一行標(biāo)識符 種子數(shù)種子數(shù)增長量增長量創(chuàng)建標(biāo)識列創(chuàng)建一個(gè)新表,該表將 IDENTITY 屬性用于獲得自動(dòng)增加的標(biāo)識號 標(biāo)識列在表已創(chuàng)建之后,不能再添加,也不能刪除或修改 create tablecreate table StudentStudent ( ( s_id s_id int int identity (1001 , 1 )identity (1001 , 1 ) , , s_name s_name varchar(20) varchar(20) , , s_age s_age smal

13、lintsmallint , , s_sex s_sex char(2) char(2) ) ) 標(biāo)識約束的限制標(biāo)識列的種子數(shù)和增長數(shù) 要么同時(shí)指定,要么都不指定,不指定默認(rèn)為identity(1,1)一張表只能由一個(gè)標(biāo)識列標(biāo)識列只能在數(shù)據(jù)類型為 decimal、int、numeric、smallint、bigint 或 tinyint 的列上定義標(biāo)識列和默認(rèn)值約束不能同時(shí)出現(xiàn)在一個(gè)字段上標(biāo)識約束的限制插入數(shù)據(jù)時(shí),不能指定自增長列的值 insert into Student values(liubei,36,M)指定自增長的同時(shí)定義主鍵 create tablecreate table Stu

14、dentStudent ( ( s_id s_id int int identity (1001, 1) identity (1001, 1) primary keyprimary key , , s_name s_name varchar(20) varchar(20) , , s_age s_age smallintsmallint , , s_sex s_sex char(2) char(2) ) ) 域完整性為列指定數(shù)據(jù)類型 檢查約束 check默認(rèn)值約束非空約束 not nullCHECK約束CHECK約束檢查約束通過邏輯判斷限定插入到該列的值檢查約束通過邏輯判斷限定插入到該列的值為

15、表添加檢查約束為表添加檢查約束 create tablecreate table Student (Student ( s_id s_id int primary keyint primary key , , s_name s_name varchar(20) varchar(20) , , s_age s_age smallintsmallint , , s_sex s_sex char(2) Checkchar(2) Check( ( s_s_sex=F or sex=F or s_s_sex=M)sex=M) ) ) a alter table Student lter table St

16、udent a add constraint ck_stud check dd constraint ck_stud check ( ( s s_age like 0-90-9);_age like 0-90-9);默認(rèn)值約束創(chuàng)建表時(shí)指定DEFAULT約束 Check(sex=F or sex=M) create tablecreate table Student (Student ( s_id s_id int primary keyint primary key , , s_name s_name varchar(20) varchar(20) , , s_age s_age smalli

17、nt default 18smallint default 18 , , s_sex s_sex char(2) default Mchar(2) default M ) ) 添加默認(rèn)值約束給已創(chuàng)建的表添加默認(rèn)值約束 ALTER TABLE ALTER TABLE STUDENT STUDENT ADD CONSTRAINTADD CONSTRAINT DF_STUDENT DF_STUDENT DEFAULTDEFAULT 18 18 FORFOR s_age s_age非空約束NOT NULL約束 這種類型的約束用來迫使用戶一定要在表中指這種類型的約束用來迫使用戶一定要在表中指定列中輸入一

18、個(gè)值。定列中輸入一個(gè)值。 create tablecreate table StudentStudent ( ( s_id s_id int primary keyint primary key , , s_name s_name varchar(20) not null varchar(20) not null , , s_age s_age smallint smallint , , s_sex s_sex char(2)char(2) ) ) 參照完整性外鍵約束用來在兩張表中建立一個(gè)引用 當(dāng)一個(gè)表中的一列被增加到另一個(gè)表中,鏈接就建立了 外鍵約束的主要功能是阻止用戶鍵入在另一個(gè)表中沒有相關(guān)行的數(shù)據(jù)到表中 外鍵在創(chuàng)建表時(shí)設(shè)置外鍵 create tablecreate table scoresscores ( ( score_id score_id int primary keyint primary key , , s_id s_id int References student(s_id) int References student(s_id) , , s_age s_age smallint default 18smallint default 18 , , s_sex s_sex char(2) default Mchar(2)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論