必威电竞|足球世界杯竞猜平台

參照完整性
來源:互聯(lián)網(wǎng)

參照的完整性要求關(guān)系中不允許引用不存在的實體。與實體完整性是關(guān)系模型必須滿足的完整性約束條件,目的是保證數(shù)據(jù)的一致性。參照完整性又稱引用完整性。

概念介紹

參照完整性是關(guān)系模型的完整約束之一,屬于數(shù)據(jù)完整性的一種,其余還有:實體完整性、用戶自定義完整性。

參照完整性規(guī)則:若屬性或?qū)傩越MF是基本關(guān)系R的外鍵,它與基本關(guān)系S的主鍵K相對應(yīng)(基本關(guān)系R和S不一定是不同的關(guān)系),則對于R中的每個元組在F上的值必須為:

(1)空值,F(xiàn)的每個屬性值均為空值。

(2)S中某個元組中的主鍵值(主碼值)。

即參照的關(guān)系中的屬性值必須能夠在被參照關(guān)系找到或者取空值,否則不符合數(shù)據(jù)庫的語義。在實際操作時如更新、刪除、插入一個表中的數(shù)據(jù),通過參照引用相互關(guān)聯(lián)的另一個表中的數(shù)據(jù),來檢查對表的數(shù)據(jù)操作是否正確,不正確則拒絕操作。

引用關(guān)系

同一關(guān)系

在參照完整性規(guī)則中,R和S可以是同一個關(guān)系。

在學(xué)生(學(xué)號,姓名,性別,年齡,專業(yè)號,班長)關(guān)系中,“學(xué)號”屬性是主鍵,“班長”屬性表示該學(xué)生所在班級的班長的學(xué)號,因此它應(yīng)用的本關(guān)系“學(xué)號”屬性。按照參照完整性規(guī)則,“班長”屬性可以取以下兩類值:

(1)空值,表示該學(xué)生所在班級尚未選出班長。

(2)非空值,該值必須是本關(guān)系中某個元組的學(xué)號值,即某個當(dāng)選班長的學(xué)生的學(xué)號值。

兩個關(guān)系

如學(xué)生實體和專業(yè)實體可以用下列關(guān)系模式來表示,其中學(xué)號是學(xué)生的主鍵,專業(yè)號是專業(yè)的主鍵:

學(xué)生(學(xué)號,姓名,性別,專業(yè)號,年齡)

專業(yè)(專業(yè)號,專業(yè)名)

這兩個關(guān)系之間存在著屬性的引用(含有相同的屬性“專業(yè)號”),學(xué)生關(guān)系引用了專業(yè)關(guān)系的主鍵“專業(yè)號”,專業(yè)號則是學(xué)生關(guān)系的外鍵。而且按照參照完整性規(guī)則,學(xué)生關(guān)系(并非專業(yè)關(guān)系)中的每個元組的“專業(yè)號”屬性只能取兩種值:

(1)空值,表示尚未給學(xué)生分配專業(yè)。

(2)非空值,這時該值必須是專業(yè)關(guān)系中某個元組的“專業(yè)號”值,表示該學(xué)生不可能分配到一個不存在的專業(yè)中去。就是說學(xué)生關(guān)系中的某個屬性的取值需要參照專業(yè)關(guān)系的屬性取值。

多個關(guān)系

兩個以上的關(guān)系也可以存在引用關(guān)系,學(xué)生、課程、選課(學(xué)生與課程)之間的聯(lián)系可以用下列三個關(guān)系來表示:

學(xué)生(學(xué)號,姓名,性別,專業(yè)號,年齡)

專業(yè)(專業(yè)號,專業(yè)名)

選課(學(xué)號,課程號,成績)

這里的“學(xué)號”和“課程號”屬性都是選課關(guān)系的外鍵,但只有“學(xué)號”和“課程號”聯(lián)合起來才能確定選課的關(guān)系,所以這里存在一個復(fù)合主鍵關(guān)系,(學(xué)號,課程號)是選課關(guān)系的主鍵。雖然按照參照完整性可以取兩類值,但是由于實體完整性,復(fù)合主鍵中的每個屬性均不能取空值。所以選課關(guān)系中的”學(xué)號“和”課程號”屬性實際上只能取被參照關(guān)系(學(xué)生關(guān)系和專業(yè)關(guān)系)中已經(jīng)存在的主鍵值。即選課關(guān)系中的“學(xué)號”值必須是確實存在的學(xué)生的學(xué)號,學(xué)生關(guān)系中有該學(xué)生的記錄;選課關(guān)系中的“課程號”值也必須是確定存在的課程的課程號,即課程關(guān)系中有該課程的記錄。

表間規(guī)則

參照完整性屬于表間規(guī)則。對于永久關(guān)系的相關(guān)表,在更新、插入或刪除記錄時,如果只改其一不改其二,就會影響數(shù)據(jù)的完整性:例如修改父表中關(guān)鍵字值后,子表關(guān)鍵字值未做相應(yīng)改變;刪除父表的某記錄后,子表的相應(yīng)記錄未刪除,致使這些記錄成為孤立記錄;對于子表插入的記錄,父表中沒有相應(yīng)關(guān)鍵字值的記錄;等等。對于這些設(shè)計表間數(shù)據(jù)的完整性,統(tǒng)稱為參照完整性。

參照完整性則是相關(guān)聯(lián)的兩個表之間的約束,具體的說,就是從表中每條記錄外鍵的值必須是主表中存在的,因此,如果在兩個表之間建立了關(guān)聯(lián)關(guān)系,則對一個關(guān)系進行的操作要影響到另一個表中的記錄。

如果實施了參照完整性,那么當(dāng)主表中沒有相關(guān)記錄時,就不能將記錄添加到相關(guān)表中。也不能在相關(guān)表中存在匹配的記錄時刪除主表中的記錄,更不能在相關(guān)表中有相關(guān)記錄時,更改主表中的主鍵值。也就是說,實施了參照完整性后,對表中主鍵字段進行操作時系統(tǒng)會自動地檢查主鍵字段,看看該字段是否被添加、修改、刪除了。如果對主鍵的修改違背了參照完整性的要求,那么系統(tǒng)就會自動強制執(zhí)行參照完整性。

實踐應(yīng)用

例如,如果在學(xué)生表和選修課之間用學(xué)號建立關(guān)聯(lián),學(xué)生表是主表,選修課是從表,那么,在向從表中輸入一條新記錄時,系統(tǒng)要檢查新記錄的學(xué)號是否在主表中已存在,如果存在,則允許執(zhí)行輸入操作,否則拒絕輸入,這就是參照完整性。

參照完整性還體現(xiàn)在對主表中的刪除和更新操作,例如,如果刪除主表中的一條記錄,則從表中凡是外鍵的值與主表的主鍵值相同的記錄也會被同時刪除,將此稱為級聯(lián)刪除;如果修改主表中主關(guān)鍵字的值,則從表中相應(yīng)記錄的外鍵值也隨之被修改,將此稱為級聯(lián)更新。

學(xué)生表(主表)

選修課表(從表)

參照完整性的體現(xiàn):不可以在表二中插入“200103”數(shù)據(jù),因為值“200103”在主表中不存在加入“200103”數(shù)據(jù)破壞了完整性的原則,也就是破壞了多表間(A表主碼=B表外碼)的一致性。不同的表相同的列名的數(shù)據(jù)保持不變,不能單獨增加,就算要增加(或刪除)也要同時增加(或刪除)。

參考資料 >

生活家百科家居網(wǎng)