第8章 關(guān)系完整性_第1頁(yè)
第8章 關(guān)系完整性_第2頁(yè)
第8章 關(guān)系完整性_第3頁(yè)
第8章 關(guān)系完整性_第4頁(yè)
第8章 關(guān)系完整性_第5頁(yè)
已閱讀5頁(yè),還剩26頁(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)介

第8章關(guān)系完整性

什么是關(guān)系完整性完整性的類型數(shù)據(jù)庫(kù)約束

返回目錄關(guān)系的完整性是對(duì)關(guān)系的某種約束條件,保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性與一致性完整性類型實(shí)體完整性參照完整性用戶自定義完整性實(shí)體完整性與參照完整性是關(guān)系必須模型必須滿足的約束,稱為兩個(gè)不變性實(shí)體完整性定義:若屬性A是關(guān)系R的主屬性,則A不能取空值保證實(shí)體集中的每個(gè)實(shí)體唯一且可標(biāo)識(shí)例:學(xué)生實(shí)體的主屬性是學(xué)號(hào),則每個(gè)學(xué)生實(shí)體的學(xué)號(hào)都不能為空實(shí)體完整性是針對(duì)基本關(guān)系而言的,一個(gè)關(guān)系只需要定義一個(gè)實(shí)體完整性參照完整性指關(guān)系間的引用,用來(lái)反應(yīng)關(guān)系之間的相互聯(lián)系學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào))專業(yè)(專業(yè)號(hào),專業(yè)名)學(xué)生實(shí)體中的專業(yè)號(hào)引用專業(yè)實(shí)體中的專業(yè)號(hào)‘學(xué)生’關(guān)系稱為參照關(guān)系,或從表,‘專業(yè)’關(guān)系稱為被參照關(guān)系,或主表其中學(xué)生實(shí)體中的專業(yè)號(hào)被稱為外碼(外鍵)外碼須引用被參照關(guān)系的主碼參照完整性約束若屬性F是基本關(guān)系R的外碼,它與基本關(guān)系S中的主碼K相對(duì)應(yīng),則對(duì)于R中每個(gè)元組在F上的值必須為:或者空值或者等于S中某個(gè)元組的主碼值參照完整性約束還體現(xiàn)在對(duì)主表的刪除和更新操作上刪除操作:若刪除主表記錄,該記錄主碼被從表的外碼引用,則限制刪除。級(jí)聯(lián)刪除:若刪除主表記錄,凡引用自該記錄主碼值的外碼對(duì)應(yīng)記錄也一并刪除級(jí)聯(lián)更新:若更新主表中主碼的值記錄,凡引用自該記錄主碼值的外碼值也一并更新分析:選修(學(xué)號(hào),課程號(hào),成績(jī))關(guān)系中,學(xué)號(hào)和課程號(hào)兩個(gè)外碼的取值課程號(hào)課程名學(xué)分01數(shù)據(jù)結(jié)構(gòu)402操作系統(tǒng)303數(shù)據(jù)庫(kù)4學(xué)號(hào)姓名性別專業(yè)號(hào)801吳平女10802張良男20803周錦女30804林風(fēng)男20學(xué)號(hào)課程號(hào)成績(jī)8010170802016580503858020690用戶自定義完整性不同的關(guān)系型數(shù)據(jù)庫(kù)針對(duì)自身環(huán)境的不同,所定義的完整性只適用于自身特定的數(shù)據(jù)庫(kù)如某個(gè)屬性的值必須取自某一個(gè)區(qū)間,某個(gè)非主碼不能取空值等。SQLSERVER數(shù)據(jù)庫(kù)完整性約束數(shù)據(jù)完整性包括:實(shí)體完整性域完整性參照完整性(引用)用戶自定義完整性(觸發(fā)器)確保數(shù)據(jù)完整性的方法主要有:約束規(guī)則觸發(fā)器實(shí)體完整性實(shí)體完整性:保證數(shù)據(jù)庫(kù)表中的每行記錄都是唯一的PRIMARYKEY約束 主鍵UNIQUE約束 唯一IDENTITY屬性 標(biāo)識(shí)列主鍵約束主鍵(PRIMARYKEY)約束一個(gè)表中可以有一個(gè)或一個(gè)以上的列組合,這些組合能惟一標(biāo)識(shí)表中的行,每個(gè)組合就是一個(gè)候選鍵數(shù)據(jù)庫(kù)管理員從候選鍵中選擇一個(gè)作為主鍵在一個(gè)表中,不能有兩行包含相同的主鍵值。不能在主鍵內(nèi)的任何列中輸入NULL值。

11-31定義主鍵主鍵的表級(jí)定義方式

create

tableStudent

(

sid

int

primarykey,

s_name

varchar(20),

s_age

smallint,s_sex

char(2))主鍵添加主鍵altertableStudentaddconstraintpk_studprimarykey(sid);聯(lián)合主鍵prod_idfactory_idp_namepriceN124F102酸牛奶24.5N124F368酸牛奶24.5N216F102純牛奶19.0N216F247純牛奶19.0?聯(lián)合主鍵聯(lián)合主鍵聯(lián)合主鍵:指在多個(gè)列上創(chuàng)建一個(gè)主鍵聯(lián)合主鍵的創(chuàng)建:create

table

score(

score_id

intnotnull

,

sid

int,

score

float,

datesmalldatetime,

constraintpk_scoreprimarykey(

score_id,

sid))聯(lián)合主鍵15-31主鍵的限制一張表只能有一個(gè)主鍵,但是可以創(chuàng)建聯(lián)合主鍵不能在可以為空的字段上添加主鍵主鍵所在的字段中的記錄不能為空,不能重復(fù)當(dāng)主鍵所在的列正被其他表的外鍵引用時(shí),不能被刪除16-31唯一性約束唯一(UNIQUE)性約束UNIQUE約束在列集內(nèi)強(qiáng)制執(zhí)行值的惟一性

如果用戶試圖輸入一個(gè)該列中已經(jīng)存在的值,此行將被拒絕并產(chǎn)生一個(gè)錯(cuò)誤創(chuàng)建唯一性約束在創(chuàng)建表的同時(shí)指定唯一性約束:

給表添加唯一約束

createtable

Student(

s_idintnotnull

,s_namevarchar(20)Unique,s_agesmallint,s_sexchar(2))

唯一性altertableStudentaddconstraintuk_stuunique(s_name);注意事項(xiàng)一個(gè)表可以定義多個(gè)UNIQUE約束,但只能定義一個(gè)PRIMARYKEY約束如果該列有允許空值的約束,唯一性(UNIQUE)約束也允許空值(null)FOREIGNKEY約束可以引用UNIQUE約束標(biāo)識(shí)列(自動(dòng)增長(zhǎng))標(biāo)識(shí)(IDENTITY)屬性標(biāo)識(shí)屬性用于在表中創(chuàng)建一個(gè)標(biāo)識(shí)列IDENTITY[(seed,increment)]seed,increment要么同時(shí)指定,要么都不指定標(biāo)識(shí)列通常與PRIMARYKEY約束一起用作表的唯一行標(biāo)識(shí)符種子數(shù)增長(zhǎng)量創(chuàng)建標(biāo)識(shí)列創(chuàng)建一個(gè)新表,該表將IDENTITY屬性用于獲得自動(dòng)增加的標(biāo)識(shí)號(hào)標(biāo)識(shí)列在表已創(chuàng)建之后,不能再添加,也不能刪除或修改

createtable

Student(

s_idintidentity(1001,1)

,s_namevarchar(20),s_agesmallint,s_sexchar(2))

自增長(zhǎng)標(biāo)識(shí)列標(biāo)識(shí)約束的限制標(biāo)識(shí)列的種子數(shù)和增長(zhǎng)數(shù)要么同時(shí)指定,要么都不指定,不指定默認(rèn)為identity(1,1)一張表只能由一個(gè)標(biāo)識(shí)列標(biāo)識(shí)列只能在數(shù)據(jù)類型為decimal、int、numeric、smallint、bigint或tinyint的列上定義標(biāo)識(shí)列和默認(rèn)值約束不能同時(shí)出現(xiàn)在一個(gè)字段上標(biāo)識(shí)約束的限制插入數(shù)據(jù)時(shí),不能指定自增長(zhǎng)列的值

insert

intoStudentvalues(‘liubei’,36,‘M’)指定自增長(zhǎng)的同時(shí)定義主鍵

createtable

Student(

s_idintidentity(1001,1)primarykey

,s_namevarchar(20),s_agesmallint,s_sexchar(2))

域完整性為列指定數(shù)據(jù)類型檢查約束check默認(rèn)值約束非空約束notnullCHECK約束CHECK約束檢查約束通過(guò)邏輯判斷限定插入到該列的值為表添加檢查約束

createtable

Student(

s_idintprimarykey

,s_namevarchar(20),s_agesmallint,s_sexchar(2)Check(

s_sex='F'ors_sex='M'))

檢查約束altertableStudentaddconstraintck_studcheck(

s_agelike‘[0-9][0-9]’);默認(rèn)值約束創(chuàng)建表時(shí)指定DEFAULT約束Check(sex='F'orsex='M')

createtable

Student(

s_idintprimarykey

,s_namevarchar(20),s_agesmallintdefault18

,s_sexchar(2)default‘M’)

默認(rèn)值添加默認(rèn)值約束給已創(chuàng)建的表添加默認(rèn)值約束ALTERTABLESTUDENT

ADDCONSTRAINTDF_STUDENT

DEFAULT18FORs_age非空約束NOTNULL約束這種類型的約束用來(lái)迫使用戶一定要在表中指定列中輸入一個(gè)值。

createtable

Student(

s_idintprimarykey

,s_namevarchar(20)notnull,s_agesmallint,s_sexchar(2))

非空參照完整性外鍵約束用來(lái)在兩張表中建立一個(gè)引用

當(dāng)一個(gè)表中的一列被增加到另一個(gè)表中,鏈接就建立了

外鍵約束的主要功能是阻止用戶鍵入在另一個(gè)表中沒(méi)有相關(guān)行的數(shù)據(jù)到表中

外鍵在創(chuàng)建表時(shí)設(shè)置外鍵

createtable

scores(

score_idintprimarykey

,s_idintReferencesstudent(s_id),s_agesmallintdefault18

,

溫馨提示

  • 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)論