文章目錄
- 域、笛卡爾積、關系、元組、屬性
- 主碼、候選碼、外碼
- 關系模式,關系,關系資料庫
- 關系模型的完整性規則
- 關系運算
-
- 選擇
- 投影
- 連接配接
- 像集
- 除
域、笛卡爾積、關系、元組、屬性
- 域是一組具有相同資料類型的值的集合,比如整數,浮點數,無理數。或者{小明,小紅,小麗,…}
- 笛卡爾積為域和域之間的運算,就是,周遊兩個集合所有的可能組合。 D 1 × D 2 = { ( x , y ) } D_1 \times D_2=\{(x,y)\} D1×D2={(x,y)}
主碼、候選碼、外碼
- 候選碼是一個屬性組,這個屬性組能夠唯一地辨別一個元組(比如說居民身份證在國内唯一的辨別了某一個确定的人),而其子集不能。
- 一個關系如果有多個候選碼,標明一個作為主碼,候選碼的各個屬性成為主屬性
-
F是R的外碼,如果F滿足:
F是R的一個或者一組屬性,且F不是R的主碼;
Ks是關系S的主碼,而F與Ks相對應
比如,學生關系中的所選擇的專業号這一屬性,這與專業關系中的專業的專業号可以形成一一對應,那麼這時我們稱專業号是學生關系中的外碼。并且,稱學生關系為參照關系,專業關系為被參照關系;
注:外碼可以為空,該例中表示未給學生配置設定專業。
關系模式,關系,關系資料庫
- 關系,在使用者看來,就是一張扁平的二維表。專業術語叫它:隻包含單一的資料結構——關系
- 關系模式就是關系的描述, R ( U , D , D O M , F ) R(U,D,DOM,F) R(U,D,DOM,F),包括:
- U U U表示該關系的屬性名集合,比如學生名,學号,…
- D D D表示屬性中資料來自的域,比如字元串,數字串,…
- D O M DOM DOM為屬性向域的映像集合,比如規定學生名中隻能映射到{小明,小紅,…}
- F F F為屬性間的依賴關系,比如小紅的學号是2015053078,而不是2015053071
- 關系資料庫就是在一個給定的應用領域中,所有關系的集合。比如校園網系統,關系資料庫就是包括學生學号關系,專業課關系,選課關系,課程老師關系,學生老師關系,…等等關系的集合
關系模型的完整性規則
-
實體完整性
主屬性不能包含有空
-
參照完整性
外碼可以為空,但是外碼的取值範圍一定是在被參照關系所對應屬性中的取值。
比如,學生關系,其中的專業号引用了專業關系中的專業号,這時,學生關系中的專業号屬性可以為空,表示暫時沒有給這個學生配置設定專業,但是這個專業号不能是專業關系中不存在的專業号。
-
使用者定義的完整性
就是說,為了滿足使用者的需求,我們額外給關系加上的限制條件就是使用者定義完整性
比如,學生的成績在0-100之間
關系運算
選擇
σ F ( t ) ( R ) \sigma_{F(t)}(R) σF(t)(R)
表示在 R R R關系中,使得 F ( t ) = t r u e F(t)=true F(t)=true的所有 t t t的集合,比如
σ n a m e = " 林 俊 傑 " ( 小 明 的 盆 友 們 ) \sigma_{name="林俊傑"}(小明的盆友們) σname="林俊傑"(小明的盆友們)就是表示從小明的盆友們這個關系中選擇出所有叫做林俊傑的個體出來。如果我們把關系了解成為一個表格的話,那麼我們可以了解為這個式子的結果就是一行一行的資料,有幾個人叫“林俊傑”,我們就有幾行
投影
Π A ( R ) = { t [ A ] ∣ t ∈ R } \Pi_{A}(R)=\{t[A]|t\in R\} ΠA(R)={t[A]∣t∈R}
比如說, Π n a m e , g e n d e r ( 小 明 的 盆 友 們 ) \Pi_{name, gender}(小明的盆友們) Πname,gender(小明的盆友們)就表示輸出兩列,一列是小明的所有盆友的名字,另一列是所有盆友的性别。
連接配接
R ⋈ A θ B S = { t r t s ^ ∣ t r ∈ R ∧ t s ∈ S ∧ t r [ A ] θ t s [ B ] } R\Join_{A \theta B} S = \{\widehat{t_r t_s}|t_r\in R \wedge t_s\in S \wedge t_r[A]\theta t_s[B]\} R⋈AθBS={trts
∣tr∈R∧ts∈S∧tr[A]θts[B]}
其中 A , B A, B A,B是屬性,大概的人意思就是對于關系 R R R和 S S S來說,隻要有一部分的資料滿足 A A A這些屬性與 B B B這些屬性有 θ \theta θ的關系,那麼我們就把他們取出來,然後連接配接在一起。
比如 R R R中的屬性有 n a m e , s t u d e n t i d name, student\ id name,student id, S S S中的屬性有 s t u d e n t i d , c o u r s e n a m e student\ id, course\ name student id,course name,那麼我們這時候使用連接配接技能:
R ⋈ s t u d e n t i d = s t u d e n t i d S R \Join_{student\ id = student\ id} S R⋈student id=student idS就是表示,如果 R R R的某些行和 S S S中的某些行的 s t u d e n t i d student\ id student id相同的話,我們就把他們連接配接在一起,并且作為連接配接的輸出。
像集
有一個關系 R ( X , Z ) R(X, Z) R(X,Z)其中 X X X和 Z Z Z是屬性,那麼
Z x Z_x Zx表示 { t [ Z ] ∣ t ∈ R , t [ X ] = x } \{t[Z]|t\in R, t[X]=x\} {t[Z]∣t∈R,t[X]=x},就是從中找到滿足 t [ X ] = x t[X]=x t[X]=x的那些行,然後求它們所對應的 t [ Z ] t[Z] t[Z]值
除
終于說到的真正想說的運算了,有點小複雜。
R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Π Y ( S ) ⊆ Y x , x = t r [ X ] } R\div S=\{t_r[X]|t_r\in R \wedge \Pi_Y(S)\subseteq Y_x, x=t_r[X]\} R÷S={tr[X]∣tr∈R∧ΠY(S)⊆Yx,x=tr[X]} = { x ∣ t r ∈ R ∧ Π Y ( S ) ⊆ Y x } =\{x|t_r\in R \wedge \Pi_Y(S)\subseteq Y_x\} ={x∣tr∈R∧ΠY(S)⊆Yx}這裡我們還是選擇舉個栗子來說明吧。
在這裡, X X X屬性在這裡為 A A A, Y Y Y屬性在這裡為 B , C B,C B,C,是以 x x x可能的取值為 { a 1 , a 2 , a 3 , a 4 } \{a_1,a_2,a_3,a_4\} {a1,a2,a3,a4}; 是以 Y x Y_x Yx的所有可能取值為 Y x = a 1 = { ( b 1 , c 2 ) , ( b 2 , c 3 ) , ( b 2 , c 1 ) } Y_{x=a_1}=\{(b_1,c2),(b2,c3),(b_2,c_1)\} Yx=a1={(b1,c2),(b2,c3),(b2,c1)}或者 Y x = a 2 { ( b 3 , c 7 ) , ( b 2 , c 3 ) } Y_{x=a_2}\{(b_3,c_7),(b_2,c_3)\} Yx=a2{(b3,c7),(b2,c3)}或 Y x = a 3 = { ( b 4 , c 6 ) } Y_{x=a_3}=\{(b_4,c_6)\} Yx=a3={(b4,c6)}或者 Y x = a 4 = { ( b 6 , c 6 ) } Y_{x=a_4}=\{(b_6,c_6)\} Yx=a4={(b6,c6)}
而 Π Y ( S ) = Π Y ( B , C ) = { ( b 1 , c 2 ) , ( b 2 , c 1 ) , ( b 2 , c 3 ) } \Pi_{Y}(S)=\Pi_{Y}(B,C)=\{(b_1,c_2),(b_2,c_1),(b_2,c_3)\} ΠY(S)=ΠY(B,C)={(b1,c2),(b2,c1),(b2,c3)},不難觀察出使得 Π Y ( S ) ⊆ Y x \Pi_Y(S)\subseteq Y_x ΠY(S)⊆Yx的 x x x隻有 a 1 a_1 a1,是以結果就是 a 1 a_1 a1啦!
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX3FlaNJTVq10dRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN3MDOyQTNwAjNykDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)