<p><span style="font-size: 12px;">轉自<a href="https://blog.csdn.net/zdplife/article/details/48060461" target="_blank">數據庫-關係代數(類型、完整性約束、基本運算、擴展運算)</a></span></p> <h3><span style="font-size: 16px;">(1)基本概念</span></h3> <h4> ① 屬性和域:</h4> <p> 每一個事物有不少屬性,每一個屬性對應的取值範圍叫作域,全部對域都是原子數據(第一範式)</p> <h4> ② 相關名詞</h4> <p> n元關係:R(D1,D2,D3...Dn)是n元關係,其中關係屬性的個數稱爲“元數”,元組的個數稱爲“基 數”,也就是記錄值。</p> <p> 候選碼:若關係中某一個屬性或者屬性組的值能夠惟一的標識一個元組,則稱爲候選碼</p> <p> 主碼:能夠選擇任意一個候選碼做爲主碼</p> <p> 主屬性:包含在任何候選碼中的屬性叫做主屬性</p> <p> 全碼:關係模型中全部屬性都是這個關係模型的候選碼,稱爲全碼</p> <p> 外碼:關係模式中的屬性非該關係的碼,則稱爲外碼</p> <h4> ③ 三種類型:</h4> <p> 基本表:實際存在的表</p> <p> 查詢表:查詢結果對應的表</p> <p> 視圖表:由基本表和其餘視圖表導出的表,不是實際存在數據庫中</p> <h4> ④ 完整性約束:</h4> <p> 實體完整性:主屬性A不能爲空值</p> <p> 參照完整性:用實體之間的關係來描述,若F是關係R的外碼,則F或者是空值,或者是某個元組的 主碼值</p> <p> 用戶定義完整性:根據具體關係數據的約束條件,好比數據範圍等</p> <h3>(2)關係五種基本運算</h3> <h4> ① 並:</h4> <p> R,S具備相同的關係模式(元素相同,結構相同),記爲R U S,返回由R或者S元組構成的集合組成</p> <h4> ② 差:</h4> <p> R,S具備相同的關係模式(元素相同,結構相同),記爲R-S,右屬於R但不屬於S的元組組成</p> <h4> ③ 廣義笛卡爾積:</h4> <p> R×S由n目和m目的關係R,S組成一個(n+m)列的元組集合,若R有K1個元組,S有K2個元組,則R×S有K1*K2個元 組</p> <h4> ④ 投影(π) :</h4> <p> 從關係的垂直方向開始運算,選擇關係中的若干列組成新的列。</p> <h4> ⑤ 選擇(σ):</h4> <p> 選擇從關係的水平方向進行元算,選擇知足給定條件的元組組成新的關係。</p> <h3>(3)擴展的關係代數運算</h3> <h4> ① 交:</h4> <p> R∩S=R-(R-S),R,S具備相同的關係模式</p> <h4> ② 連接:</h4> <p> 連接分爲θ連接,等值連接和天然連接</p> <p> θ連接:從R,S的笛卡爾積中選擇知足必定條件的元組</p> <p> 等值連接:當θ爲“=”時爲等值連接</p> <p> 天然連接:是一種特殊的等值連接,比較的份量必須是相同的屬性組,並在結果集中去掉重複列,若是沒有重複列,天然連接就轉換爲笛卡爾積</p> <h4> ③ 除:</h4> <p> 同時從水平方向和垂直方向進行運算,給定關係R(X,Y)和S(Y,Z),X,Y,Z爲屬性組,R÷S應當知足在X上的份量值x的像集Yx包含關係S在屬性組Y上的投影集合:</p> <p>例如:</p> <p> R是:</p> <table align="center" frame="border" style="margin-left:200px"> <tbody> <tr> <td valign="middle" align="center" style="width: 100px"> A </td> <td valign="middle" align="center" style="width: 100px"> B </td> <td valign="middle" align="center" style="width: 100px"> C </td> <td valign="middle" align="center" style="width: 100px"> D </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> <td align="center"> c </td> <td align="center"> d </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> <td align="center"> e </td> <td align="center"> f </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> <td align="center"> h </td> <td align="center"> k </td> </tr> <tr> <td align="center"> b </td> <td align="center"> d </td> <td align="center"> e </td> <td align="center"> f </td> </tr> <tr> <td align="center"> b </td> <td align="center"> d </td> <td align="center"> d </td> <td align="center"> l </td> </tr> <tr> <td align="center"> c </td> <td align="center"> k </td> <td align="center"> c </td> <td align="center"> d </td> </tr> <tr> <td align="center"> c </td> <td align="center"> k </td> <td align="center"> e </td> <td align="center"> f </td> </tr> </tbody> </table> <p> S是: </p> <table align="center" style="width: 97px; height: 118px;margin-left:250px" frame="border"> <tbody> <tr> <td valign="middle" align="center" style="width: 100px"> C </td> <td valign="middle" align="center" style="width: 100px"> D </td> </tr> <tr> <td align="center"> c </td> <td align="center"> d </td> </tr> <tr> <td align="center"> e </td> <td align="center"> f </td> </tr> </tbody> </table> <p> 則R÷S: </p> <table align="center" style="width: 99px; height: 118px;margin-left:250px" frame="border"> <tbody> <tr> <td valign="middle" align="center" style="width: 100px"> A </td> <td valign="middle" align="center" style="width: 100px"> B </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> </tr> <tr> <td align="center"> c </td> <td align="center"> k </td> </tr> </tbody> </table> <h4> ④ 廣義投影:</h4> <p> 廣義投影運算允許在投影列表中使用算法運算,實現對投影運算的擴充,投影出的列不必定是原來的列,能夠是經過計算出來的列。</p> <h4> ⑤ 外鏈接:</h4> <p> 因爲天然連接會丟失一些信息,而外連接能夠處理因爲連接運算而缺失的信息,外連接分爲左外連接、右外連接、全外連接。</p> <p> 左外連接:取出左側關係中全部與右側關係中任一元素都不匹配的元組,用null來填充右側的關係 屬性。</p> <p> 右外連接:取出右側關係中全部與右側關係中任一元素都不匹配的元組,用null來填充左側的關係屬性。</p> <p> 全外連接:完成左外連接和右外連接的操做。</p>算法