<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2672字,需瀏覽 6分鐘

           ·

          2021-09-02 04:07

          結(jié)論描述

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

          • 實(shí)體完整性:是用來(lái)唯一標(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ù)庫(kù)管理系統(tǒng)提供并實(shí)現(xiàn)由用戶自己定義的某個(gè)完整性。

          完整性介紹

          數(shù)據(jù)完整性約束指的是為了防止不符合規(guī)范的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù),在用戶對(duì)數(shù)據(jù)進(jìn)行插入、修改、刪除等操作時(shí),DBMS自動(dòng)按照一定的約束條件對(duì)數(shù)據(jù)進(jìn)行監(jiān)測(cè),使不符合規(guī)范的數(shù)據(jù)不能進(jìn)入數(shù)據(jù)庫(kù),以確保數(shù)據(jù)庫(kù)中存儲(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ù)和需求場(chǎng)景中要滿足的約束。

          實(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ò)關(guān)系的碼。

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

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

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

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

          • 舉例

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

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

          參照完整性

          參照完整性

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

          通過(guò)關(guān)系中屬性的值(即列的值)來(lái)關(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),成績(jī))

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

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

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

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

          外碼(Foreign Key)

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

          設(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é)生中的“班長(zhǎng)”與“學(xué)號(hào)”對(duì)應(yīng)。“班長(zhǎng)”是外碼;學(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ù)庫(kù)中的約束條件。反映的是具體應(yīng)用、具體業(yè)務(wù)或場(chǎng)景,涉及的數(shù)據(jù)必須滿足的要求。

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

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

          • 舉例:

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

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

          參考

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


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



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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级操B视频 | 国产精品V无码A片在线看吃奶 | 亚洲乱码一区二区三区 | 中文娱乐在线视频 | 777国产盗摄偷窥精品0000 |