数据库学习笔记04——关系数据库2
文章目錄
- 第三節.關系的完整性
- (一)實體完整性
- (二)參照完整性
- 關系間的引用
- 外碼
- 參照完整性(外碼取值要求)
- (三)用戶定義的完整性
- 第四節.關系代數
- (一)傳統集合運算
- 并
- 差
- 交
- 笛卡爾積
- (二)專門的關系運算
- 基礎符號
- 選擇
- 投影
- 連接
- 除
第三節.關系的完整性
- 所謂完整性是關系 需要 滿足的某種約束條件,關系的值需要滿足約束條件
- 三類完整性:實體完整性、參照完整性、用戶定義完整性
- 前兩個是關系模型必須滿足的,稱為關系的兩個不變性
- 最后一個是具體領域的具體約束
(一)實體完整性
- 實體完整性是針對基本關系而言的,一個基本表通常對應現實世界的一個實體集,每個實體之間應該有某種唯一標識
- 關系模型中以主碼作為唯一性標識
- 簡單來說就是,候選碼中的屬性即主屬性不能取空值
(二)參照完整性
關系間的引用
-
實體與實體間的聯系都是用關系來描述的,自然存在著關系與關系間的引用
-
兩個關系間的引用
-
學生的專業號必須是學校有的專業號,兩個專業號之間是引用關系,學生關系的專業號引用專業的專業號
-
學生(學號,姓名,性別,專業號,年齡)
專業(專業號,專業名)
-
-
兩個以上關系的引用
- 學生(學號,姓名,性別,專業號,年齡)
- 課程(課程號,課程名,學分)
- 選課(學號,課程號,成績)
-
同一關系內部屬性間的引用
-
學生(學號,姓名,性別,專業號,年齡,班長)
-
班長引用的學生關系中的學號
-
外碼
- 設F是基本關系R的一個或一組屬性,但不是關系R的碼,Ks是基本關系S的主碼。如果F與Ks相對應,則稱F是R的外碼
- R和S可以是相同的關系,也可以是不同的關系
- S的主碼Ks和F必須定義在同一個域上
- 外碼并不一定要與相應的主碼同名,當外碼與相應的主碼屬于不同關系時,往往取相同的名字,以便于識別
- 說白了就是F不是R的碼但是S的碼,F是R的外碼,外碼的作用是表示關系之間的聯系
參照完整性(外碼取值要求)
-
若屬性(或屬性組)F 是關系R 的外碼,它與關系S 的主碼Ks 相對應(關系R 和S 不一定是不同的關系),則對于R 中每個元組在F 上的值必須為:
- 或者取空值(F 的每個屬性值均為空值)
- 或者等于S中某個元組的主碼值
-
理解1:
- 學生(學號,姓名,性別,專業號,年齡)
- 專業(專業號,專業名)
學生沒選專業之前他的專業號就是空值,當專業確定之后專業號取值必須在專業關系中選擇
-
理解2:
- 學生(學號,姓名,性別,專業號,年齡)
- 課程(課程號,課程名,學分)
- 選課(學號,課程號,成績)
選修關系的主屬性不能取空值,只能取相應被參照關系中已經存在的主碼值
-
理解3:
- 學生(學號,姓名,性別,專業號,年齡,班長)
- 空值表示還沒有選班長
- 非空值表示班長學號必須是本關系的學號之一
(三)用戶定義的完整性
- 例子:課程(課程號,課程名,學分)
- “課程號”屬性必須取唯一值(實體完整性)
- 非主屬性“課程名”也不能取空值(用戶定義完整性,這是人為希望的,規定不能是null)
- “學分”屬性只能取值{1,2,3,4}(用戶定義完整性,這是認為希望的,規定值域的范圍)
第四節.關系代數
- 關系代數是一種抽象的查詢語言,它用關系運算來表達查詢
- 運算對象是關系,結果是關系,兩大類:傳統的集合運算符和專門的關系運算符
- 傳統的僅涉及到行,專門的涉及到行和列
(一)傳統集合運算
并
-
前提
- 目(屬性個數)要相同
- 相應的屬性要取自同一個域
-
運算
-
結果屬性個數不變,有屬于R或屬于S的元組組成,可以換順序
-
一定注意:結果是一行一行的看,看哪一行不同則加到一起
-
元組元組元組
-
差
- 前提
- 目(屬性個數)要相同
- 相應的屬性要取自同一個域
- 運算:
- 屬于R 而不屬于S 的所有元組組成 ,不能換順序
- 把R中元組依次和S每一個比較,如果S沒有則就是結果之一
交
- 前提
- 目(屬性個數)要相同
- 相應的屬性要取自同一個域
- 運算:
- 既屬于R又屬于S的元組組成 ,可以換順序
笛卡爾積
-
前提
- 嚴格地講應該是廣義的笛卡爾積,笛卡爾積的元素是元組
- R: n目關系,k1個元組
- S: m目關系,k2個元組
-
運算
-
實質上的拼接,前邊的每一個元組與后面的元組依次拼接,不能調換順序
-
列
-
一共是m+n列
-
元組的前n列是關系R的一個元組
-
后m列是關系S的一個元組
-
-
行
- k1×k2個元組
-
(二)專門的關系運算
基礎符號
- R,t屬于R,t[Ai]
- 設關系模式為 R(A1,A2,…,An),它的一個關系設為R
- t屬于R 表示t是一個元組
- t[Ai] 表示元組t中屬性Ai的一個分量
- A,t[A], A取反
- A:所有屬性的一部分,稱為屬性列或屬性組
- t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元組 t 在屬性列A上k個分量的集合
- A非,表示把所有屬性列中A的部分去掉。
- tr連接ts(類似于廣義的笛卡爾積)
- R為n目關系,S為m目關系
- tr 屬于R,ts屬于S, tr連接ts稱為元組的連接
- tr連接ts是一個n + m列的元組,前n個分量為R中的一個n元組,后m個分量為S中的一個m元組
- 象集——
- 給定一個關系R(X,Z),X和Z為屬性組。當t[X]=x時,x在R中的象集定義為Zx={ t[Z]|t∈R,t[X]=“x” }
- 它表示R中屬性組X上值為x的所有元組在Z上分量的集合
- 即固定一個,選出與固定的這個有關的分量
選擇
-
選擇又稱為限制
-
在關系R中選擇滿足給定條件的元組
σF(R)=t∣t屬于R∧F(t)=TrueσF(R) = {t|t屬于R∧F(t)= True} σF(R)=t∣t屬于R∧F(t)=True-
F:選擇條件,是一個邏輯表達式,基本形式為: X1θY1
-
θ表示比較運算符,它可以是>,≥,<,≤,=或<>
-
選擇運算是從關系R中選取使邏輯表達式F為真的元組,是從行的角度進行的運算
-
選擇就是根據要求的條件選擇行來查詢
-
投影
-
從R中選擇出若干屬性列組成新的關系
πA(R)=t[A]∣tI^RπA(R) = { t[A] | t ?R } πA(R)=t[A]∣tI^R
? A:R中的屬性列 -
投影操作主要是從列的角度進行運算
-
但是有一種特殊的情況,如果只選擇一個列,可能會有很多重復的分量,DBMS會自動去重,所以把重復元組就去掉了
連接
- 連接也稱為θ連接
- 從兩個關系的笛卡爾積中選取屬性間滿足一定條件的元組
- 分類:
- 等值連接:θ為=的連接運算,從關系R與S的廣義笛卡爾積中選取A、B屬性值相等的那些元組
- 自然連接:是一種特殊的等值連接,把重復的屬性列去掉,從行和列的角度運算
- 一般連接:從行的角度,根據θ取值來進行連接
- 懸浮元祖
- 兩個關系R和S在做自然連接時,關系R中某些元組有可能在S中不存在公共屬性上值相等的元組,從而造成R中這些元組在操作時被舍棄了,這些被舍棄的元組稱為懸浮元組
- 外連接:
- 如果把舍棄的元組也保存在結果關系中,而在其他屬性上填空值(Null),這種連接就叫做外連接
- 左外連接:如果只把左邊關系R中要舍棄的元組保留就叫做左外連接
- 右外連接:如果只把右邊關系S中要舍棄的元組保留就叫做右外連接
- 外連接 = 左外連接+右外連接,外連接的方法就是做一個百搭元組,把所有的分量都置成null
除
- 給定關系R (X,Y) 和S (Y,Z),其中X,Y,Z為屬性組。R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運算得到一個新的關系P(X),P是R中滿足下列條件的元組在X屬性列上的投影:元組在X上分量值x的象集Yx包含S在Y上投影的集合
- 步驟:
- 1.劃分X、Y、Z,只有R有的是X,只要S有的是Z,公共的是Y
- 求關系R中X屬性各個分量在Y上的象集
- 關系S對Y做投影
- 包含S對Y上投影的象集對應的屬性分量
- 簡而言之,最關鍵的三個步驟就是,劃分后的求象集、找S對Y的投影,比較包含
- 出現至少、全部等字眼用除
總結
以上是生活随笔為你收集整理的数据库学习笔记04——关系数据库2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 耶格肺功能仪软件 - 弥散测试
- 下一篇: 如何做好rebuttal