1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        徹底聊聊關(guān)系數(shù)據(jù)庫中的完整性約束:實(shí)體完整性、參照完整性和用戶定義的完整性

        共 2672字,需瀏覽 6分鐘

         ·

        2021-09-02 04:07

        結(jié)論描述

        先用最簡單的話總結(jié)一下,實(shí)體、參照和用戶定義的完整性,避免理論性的論述性的內(nèi)容過長過繁。

        • 實(shí)體完整性:是用來唯一標(biāo)識(shí)實(shí)體的要求(即現(xiàn)實(shí)世界中唯一存在的一個(gè)事物、人或個(gè)體)。不能為空,需要唯一確認(rèn),表示的是這一條記錄的實(shí)體的完整唯一,通常用主鍵描述,不能為空且不重復(fù)。

        • 參照完整性:它表示的是兩個(gè)關(guān)系之間的聯(lián)系,是表與表之間的引用。對(duì)應(yīng)的就是外鍵,外鍵約束實(shí)現(xiàn)參照完整性。

        外碼(外鍵)要么取空值,要么取引用的表的主碼(主鍵)值,或碼的值。

        • 用戶定義的完整性:這是針對(duì)某個(gè)具體的業(yè)務(wù)、特定的實(shí)際需求而定義的,關(guān)系中的屬性需要滿足的條件或取值范圍等。即數(shù)據(jù)庫管理系統(tǒng)提供并實(shí)現(xiàn)由用戶自己定義的某個(gè)完整性。

        完整性介紹

        數(shù)據(jù)完整性約束指的是為了防止不符合規(guī)范的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫,在用戶對(duì)數(shù)據(jù)進(jìn)行插入、修改、刪除等操作時(shí),DBMS自動(dòng)按照一定的約束條件對(duì)數(shù)據(jù)進(jìn)行監(jiān)測(cè),使不符合規(guī)范的數(shù)據(jù)不能進(jìn)入數(shù)據(jù)庫,以確保數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)正確、有效、相容。

        數(shù)據(jù)完整性(Data Integrity)保證的是數(shù)據(jù)的精確(Accuracy)和可靠性(Reliability)。

        正確和相容(外鍵約束)

        數(shù)據(jù)完整性主要分三類:

        • 實(shí)體完整性

        • 參照完整性

        • 用戶定義的完整性

        就是根據(jù)定義的一組(多個(gè))規(guī)則,RDBMS實(shí)現(xiàn)對(duì)數(shù)據(jù)完整性的保證。

        實(shí)體完整性和參照完整性是關(guān)系模型必須滿足的完整性約束條件,稱為關(guān)系的兩個(gè)不變性,應(yīng)該由關(guān)系系統(tǒng)自動(dòng)支持。

        用戶定義的完整性是應(yīng)用領(lǐng)域需要遵循的約束條件,體現(xiàn)的是具體領(lǐng)域、具體業(yè)務(wù)和需求場景中要滿足的約束。

        實(shí)體完整性(Entity Integrity)

        實(shí)體代表了現(xiàn)實(shí)世界中實(shí)際存在事、物、人或抽象的概念。

        這就要求實(shí)體是客觀存在的,是可分辨可區(qū)分的。比如現(xiàn)實(shí)中的兩個(gè)學(xué)生,是可區(qū)分的,這是兩個(gè)不同的個(gè)體;兩個(gè)相同型號(hào)的手機(jī),也是可分辨的兩個(gè)不同的物體。

        當(dāng)將兩個(gè)學(xué)生、兩個(gè)手機(jī)不同的客體的相關(guān)數(shù)據(jù),從現(xiàn)實(shí)空間映射到數(shù)據(jù)空間時(shí),就是兩條記錄。這兩條記錄也應(yīng)該是可區(qū)分的。

        如何區(qū)分關(guān)系中的兩個(gè)實(shí)體或兩個(gè)記錄?是通過關(guān)系的碼。

        實(shí)體的完整性,就是對(duì)關(guān)系的碼做出要求,即不能取空值。

        關(guān)系的主屬性不能取空值。必須是確定的唯一的值,否則無法區(qū)分兩條記錄。

        空值,NULL,在數(shù)據(jù)庫中表示一種特殊值,它表示“不知道”或“不確定”或“無意義,不存在”的特殊狀態(tài)。

        由于“不知道”、“不確定”,所有任何值和NULL進(jìn)行操作的結(jié)果都是NULL,都是不確定。

        • 舉例

        比如"選修"關(guān)系中:選修(學(xué)號(hào),課程號(hào),成績)。

        “學(xué)號(hào)、課程號(hào)”為主碼,這兩個(gè)屬性都不能取空值。

        參照完整性

        參照完整性

        參照完整性指的是關(guān)系與關(guān)系之間的聯(lián)系,即表與表之間的聯(lián)系,通常對(duì)應(yīng)表中的外鍵約束或外鍵引用。

        通過關(guān)系中屬性的值(即列的值)來關(guān)聯(lián)不同的關(guān)系實(shí)體。

        • 比如:專業(yè)實(shí)體、學(xué)生實(shí)體及它們之間一對(duì)多的聯(lián)系。

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

        專業(yè)(專業(yè)號(hào),專業(yè)名)

        學(xué)生關(guān)系引用了專業(yè)關(guān)系的主碼“專業(yè)號(hào)”;學(xué)生關(guān)系中的“專業(yè)號(hào)”的值必須是確實(shí)存在的專業(yè)的“專業(yè)號(hào)”。

        • 再比如:學(xué)生、課程、學(xué)生與課程之間的多對(duì)多聯(lián)系

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

        課程(課程號(hào),課程名,學(xué)分)

        選修(學(xué)號(hào),課程號(hào),成績)

        • 再比如:學(xué)生實(shí)體及其內(nèi)部的一對(duì)多聯(lián)系

        學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào),年齡,班長)

        “學(xué)號(hào)”是主碼,“班長”是外碼,它引用了本關(guān)系的“學(xué)號(hào)”。

        “班長” 必須是確實(shí)存在的學(xué)生的學(xué)號(hào)。

        外碼(Foreign Key)

        外碼對(duì)應(yīng)數(shù)據(jù)庫中表的外鍵。

        設(shè) F 是基本關(guān)系 R 的一個(gè)或一組屬性,但不是關(guān)系 R 的碼。

        如果 F與基本關(guān)系 S 的主碼 K_s 相對(duì)應(yīng),則稱 FR 的外碼。

        • 基本關(guān)系 R 稱為參照關(guān)系(Referencing Relation)

        • 基本關(guān)系 S 稱為被參照關(guān)系(Referenced Relation)或目標(biāo)關(guān)系(Target Relation)

        自引用的屬性也是外碼。比如學(xué)生中的“班長”與“學(xué)號(hào)”對(duì)應(yīng)?!鞍嚅L”是外碼;學(xué)生關(guān)系既是參照關(guān)系也是被參照關(guān)系。

        外碼并不一定要與相應(yīng)的主碼同名。不是自引用的參照完整性,通常外碼與主碼都會(huì)取相同的名字,便于識(shí)別。

        參照完整性的規(guī)則

        若屬性(或?qū)傩越M) F 是基本關(guān)系R的外碼,它與基本關(guān)系S的主碼 K_s 相對(duì)應(yīng),則對(duì)于R中每個(gè)元組在F上的值必須為:

        • 或者取空值(F的每個(gè)屬性值均為空值)

        • 或者等于S中某個(gè)元組的主碼值

        也就是,外碼(外鍵)要么取空值,要么取引用的表的主碼(主鍵)值,或碼的值。

        現(xiàn)代RDBMS中,外鍵通常也都支持引用表的碼屬性,而不一定是主鍵,比如唯一約束的列。

        外碼(外鍵)可以去空值的原因在于,它并不用于區(qū)分標(biāo)識(shí)實(shí)體的唯一,不用于區(qū)分不同的實(shí)體,取空值不影響實(shí)體完整性。空值表示參照關(guān)系中的這個(gè)元組(實(shí)體)在外碼(外鍵)屬性上的值暫時(shí)未知,即字段值未知的狀態(tài)。

        • 舉例

        學(xué)生關(guān)系中每個(gè)元組的“專業(yè)號(hào)”屬性只取兩類值:

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

        (2)非空值,這時(shí)該值必須是專業(yè)關(guān)系中某個(gè)元組的“專 業(yè)號(hào)”值,即該學(xué)生不可能分配一個(gè)不存在的專業(yè)。

        用戶定義的完整性

        用戶定義的完整性,針對(duì)的是某一個(gè)具體使用的數(shù)據(jù)庫中的約束條件。反映的是具體應(yīng)用、具體業(yè)務(wù)或場景,涉及的數(shù)據(jù)必須滿足的要求。

        這類約束的實(shí)現(xiàn),可以放在應(yīng)用層完成檢查校驗(yàn);也可以由關(guān)系數(shù)據(jù)庫管理系統(tǒng),提供對(duì)這類完整性定義、實(shí)現(xiàn)和檢驗(yàn)的機(jī)制,由數(shù)據(jù)庫系統(tǒng)層統(tǒng)一管理和處理,減少應(yīng)用程序的負(fù)擔(dān)。

        實(shí)體完整性(主鍵)和參照完整性(外鍵)約束,也都是由數(shù)據(jù)庫系統(tǒng)層提供的約束機(jī)制。

        • 舉例:

        課程(課程號(hào),課程名,學(xué)分)

        非主屬性“課程名”不能取空值,且是唯一值?!皩W(xué)分”屬性只能取值{1,2,3,4}

        參考

        主要參考自《數(shù)據(jù)庫系統(tǒng)概論(基礎(chǔ)篇)》


        作者:代碼迷途
        鏈接:https://juejin.cn/post/7001652363094294535
        來源:掘金
        著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。



        瀏覽 643
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            深夜操逼逼 | 国内外成人免费激情视频 | 日韩aV在我线一区二区三反 | 国产又黄的a级鬼片色鬼投胎 | 年下疯批h嗯啊巨肉在线播放 | 午夜性爱福利视频 | 含精入睡h男男双性 | 干日本少妇视频 | 99成人 国产精品视频 | 成人精品三级AV在线 |