数据库完整性之参照完整性
完整性約束
- 關系模型的參照完整性
- 參照完整性定義
- 參照完整性檢查
- 參照完整性違約處理
- 使用navicat設置字段外鍵/參照完整性約束
關系模型的參照完整性
???? 數據表字段的外鍵約束屬于數據庫設計—— 關系模型的參照完整性 的內容。
????關系模型的參照完整性是指:在創建表create table的SQL語句中,用foreign key短語定義哪些列/字段作為當前數據表的外鍵,用references短語指明這些外鍵參照哪些表的主碼。
參照完整性定義
????關系模型的參照完整性使用場景舉例如下: ????假定現在有學生表student(主鍵:sno)、選課表sc(主鍵sno、cno)、課程表course(主鍵:cno),那么:sc選課表的主鍵(sno,cno)的取值就需要參考學生表student的主鍵sno和課程表course的主鍵cno。????那么,在創建sc表時,其SQL語句如下: CREATE TABLE sc(sno CHAR(11)) NOT NULL,(cno CHAR(10)) NOT NULL,grade SMALLINT,#指定主鍵PRIMARY KEY(sno,cno),//定義參照完整性FOREIGN KEY (sno) REFERENCES student(sno),FOREIGN KEY (cno) REFERENCES course(cno)
參照完整性檢查
????通過為sc表定義參照完整性,那么,sc表的主鍵(sno,cno)取值,就和student學生表的主鍵sno、course課程表的主鍵cno聯系起來了。
????那么,合理的情況應當是:對被參照表(student或者course)、參照表(sc)執行增加、刪除、修改操作時,有可能會破壞這種參照完整性規則。
????例如:當某個學生A轉校或是退學,他在student表中的記錄信息會被抹除,sno字段值當然也不會再存在,那么,sc選課表的主鍵(sno,cno)對于學生A這條記錄的sno字段值無從參考,就出現了違反參照完整性的情況。因此,必須對參照完整性進行檢查,以保證兩個表的相容性。
參照完整性違約處理
????當出現上圖中給出的違背參照完整性規則的情況時,數據庫管理系統就需要根據不同的策略執行相應的處理。一般有如下幾種規則:
????前提:現有數據表A、B,數據表A的creator字段參考了數據表B的admin字段(或者說:在創建數據表A時,指定數據表B的admin字段作為外鍵,與A表的creator相關聯),暫時稱表B為父表、表A為子表。以下策略都是在描述:當父表執行某項操作時,DBMS需要對A表執行的操作。
???? (1)拒絕(NO ACTION)操作 ????不允許該操作進行,這也是默認處理策略。
????(2)級聯(CASCADE)操作
????當刪除/修改父表B中的某一條記錄,導致子表A的某一條或者幾條記錄不一致時,同時刪除/修改子表A中所有不一致的若干條記錄。
????(3)設置為空值(SET NULL)
????當刪除/修改父表B中的某一條記錄,導致子表A的某一條或者幾條記錄不一致時,就將子表A中所有不一致的若干條記錄中的creator字段設置為空-null。
???? 例如:給定規則-
????①當刪除表student中的記錄時,級聯刪除sc表中的記錄;
????②當刪除表course中的記錄,并將導致SC表中的記錄不一致時,拒絕執行此次刪除操作;
????③當更新表student、course中的記錄時,級聯更新sc表中的記錄。
????則SQL語句如下, CREATE TABLE sc(sno CHAR(11)) NOT NULL,(cno CHAR(10)) NOT NULL,grade SMALLINT,#指定主鍵PRIMARY KEY(sno,cno),//定義參照完整性FOREIGN KEY (sno) REFERENCES student(sno)#當刪除表student中的記錄時,級聯刪除sc表中的記錄ON DELETE CASCADE#當更新表student中的記錄時,級聯更新sc表中的記錄ON UPDATE CASCADE, FOREIGN KEY (cno) REFERENCES course(cno)#當刪除表course中的記錄,并將導致SC表中的記錄不一致時,拒絕執行此次刪除操作ON DELETE NO ACTION#當更新表course中的記錄時,級聯更新sc表中的記錄ON UPDATE CASCADE
使用navicat設置字段外鍵/參照完整性約束
????使用navicat設置字段外鍵/參照完整性約束也是在創建數據表的時候指定的,只需將創建數據表的選項卡切換至“外鍵”,按照上述原理進行指定即可。當然,具體如何指定,還需要根據具體的應用場景來確定。
總結
以上是生活随笔為你收集整理的数据库完整性之参照完整性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个数据库超全,支持免费高速下载专利的资
- 下一篇: 【雕爷学编程】Arduino动手做(46