一、數據模型
關系模式是一種組織層數據模式。從數據模式三要素(數據結構,數據操作,數據的約束條件)來進行分析。
1,數據結構
關系模式用二維表來組織數據,這個二維表在關系模式中稱為關系,關系模式的邏輯結構是二維表。
①關系
關系就是二維表滿足以下條件:
a.關系中每一列都是不可再分的屬性,不能出現如下復合屬性(列不可分性):
b.關系行列無序(行列無序性),交換列的前后順序(比如性別放到年齡前面並不影響關系模式的語義表達)。
c.關系中不可能出現兩個完全相同的元組(實體完整性) 。
②屬性
二維表中的每一列稱為屬性,每個屬性有一個名字稱為屬性名,稱為屬性名(就是表頭),某一列的值稱為屬性值,上表有學號姓名年齡等屬性。
③值域
二維表中屬性的取值范圍,如性別只能取男女。
④元組
二維表中的一行數據稱為元組(記錄)。如(023904,李勇,21,男,計算機系)
⑤分量
元組中的每個屬性值稱為元組的分量,如對應姓名屬性的分量是李勇。
⑥關系模式
關系的描述就是關系模式,關系模型全體數據邏輯結構的描述就是關系模式,或者說二維表的表頭,設有關系R,屬性A1,A2,A3,則表示為R(A1,A2,A3),關系模式是型,關系就是具體的值。
⑦關系數據庫
對應一個關系模型的所有關系的集合稱為關系數據庫。
⑧各種碼以及主屬性
a.超碼:一個或多個屬性的集合,這些屬性的集合可以使我們在一個關系中唯一標識一個元組。
b.候選碼:候選碼是最小的超碼,即候選碼可以唯一標識一個元組,但除去候選碼中的任何一個屬性均不能唯一標識元組。
c.主碼:當有多個候選碼時可以選擇一個作為主碼,一個關系只有一個主碼。主碼能夠唯一標識一個關系的元組且不含有多余元素。
d.主屬性:包含在任意候選碼中的屬性稱為主屬性,不包含在任意候選碼中的屬性叫非主屬性。
e.外碼:外碼用於表示兩個或多個實體間的關聯關系。外碼實際上是關系中的一個或多個屬性,這些屬性引用其他關系的主碼或(候選碼),詳見參照完整性約束。
2.數據操作
關系模式的操作對象是集合(也就是關系)而不是行。操作的數據操作的結果都是完整的表(有表頭的),而不是單行。
操作主要包括查詢和更新(增,刪,改)。
3.數據的約束條件
在數據庫中數據的完整性是指保證數據正確性的特性。關系模型中數據完整性規則是對關系的某種約束條件。他的數據完整性約束包含三大類:實體完整性約束,參照完整性約束,用戶自定義完整性約束。
①實體完整性約束
實體完整性是指數據庫所有表中都有主碼,且表中不允許存在:
a.無主碼的記錄 (數據庫中所有記錄主碼中所有屬性都不為空) b.主碼相同的記錄
②參照完整性
參照的完整性要求關系中不允許引用不存在的實體。也稱引用完整性,參照完整性描述了實體間的聯系。參照完整性一般是指多個實體表之間的引用關系。
學生關系模式中的專業號引用了專業關系模式中的專業號(且專業號在專業關系模式中是主碼),顯然學生關系中的專業號必須是個存在的專業號(可以為空表示未分配專業)。即學生關系模式中的專業號是引用了專業關系模式中的專業號的外碼。
注:主碼要求非空且不重復,外碼沒這個要求,外碼的值要么為空要么存在。
③用戶定義完整性
用戶自定義完整性也稱為域完整性和語義完整性,任何關系數據庫管理系統都應支持實體完整性參照完整性,除此之外根據要求不同還需要加一些特殊的約束條件。
用戶定義完整性實際上就是指明關系中的取值范圍,也就是屬性的域,所以又叫域完整性,比如性別限定在男女,成績限定在0-100.
二、函數依賴
設一個關系為R(U),X和Y為屬性集U上的子集,若對於X上的每個值都有Y上的一個唯一值與之對應,則稱X和Y具有函數依賴關系,並稱X 函數決定Y,或稱Y函數依賴於X,記作X→Y,稱X為決定因素。
舉例理解,在一個表中,將所有字段分為兩部分X和Y,如果X中的一條數據可以唯一確定Y中的一條數據,則稱X和Y具有函數依賴關系,並稱為X函數決定Y,或Y函數依賴於X,記為:X一>Y,X 為決定因素。
1,完全函數依賴
設有關系模式R(U),U是屬性集,X和Y是U的子集,如果X→Y是一個函數依賴,且對X的任何一個真子集X'都不存在X'→Y,則稱X→Y是一個完全函數依賴(Full Functional Dependency),即Y完全函數依賴於X,即在一張表中字段分為 X 和 Y 兩個集合,X集合數據唯一確定一條數據 Y ,X集合字段中的任何一個字段都不能確定唯一一條數據 Y ,就稱 Y 完全函數依賴於 X
2,部分函數依賴
設有關系模式R(U),U是屬性集,X和Y是U的子集,如果X→Y是一個函數依賴,且對X的任何一個真子集X'都存在X'→Y,則稱X→Y是一個部分函數依賴(Full Functional Dependency),即Y部分函數依賴於X,即在一張表中分為 X 和 Y 集合,X集合數據唯一確定一條數據Y,並且X中任意字段或組合字段都可以唯一確定Y集合數據,則稱 Y 部分函數依賴於 X
3,傳遞函數依賴
在關系模式R(U)中,設X,Y,Z是U的不同的屬性子集,如果X確定Y、Y確定Z,且有X不包含Y,Y不確定X,(X∪Y)∩Z=空集合,則稱Z傳遞函數依賴(transitive functional dependency) 於X,即在一張表中,字段分為 X、Y、Z,如果X可以決定Y,Y決定Z,但是Y不能決定X,則稱Z傳遞函數依賴於X
三、模式分解
1)把一個關系模式分解成若干個關系模式的過程,稱為關系模式的分解。
2)把低一級的關系模式分解為若干個高一級的關系模式的方法不是唯一的。
3)只有能夠保證分解后的關系模式與原關系模式等價,分解方法才有意義。
對於第一句話,為什么需要分解關系模式?因為原來的關系模式可能造成數據冗余或給數據庫帶來潛在的不一致性。對於第二句話,根據不同語義,分解的原則也不盡相同,所以方法肯定是不唯一的,譬如U={A,B,C},根據不同原則(隨便你自己定),可能分成(A,B)(A,C)也可能分成(B,C)(A,C)。對於第三句話,為了保證分解后的關系模式與原關系模式等價,我們要判定
1)分解后形成的行的關系模式中是否為無損連接
2)是否保持函數依賴
1,無損連接的判定:
1)如果分解后的的關系模式是形如{U1,U2}這,里面只有兩個,那很好做,就判斷下面是否成立,成立的話肯定是無損連接:
2)如果是兩個以上{U1,U2,U3....}這種,那就比較麻煩了,比如,有屬性集,
ABCDEF,存在這樣的函數依賴集{A->BC , CD->E , B->D , BE->F , EF->A},然后有這樣的分解{ABC , BD , BEF}。
官方求解思路:
ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是關系模式R<U,F>的一個分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},並設F是一個最小依賴集,記FDi為Xi→Alj,其步驟如下: ① 建立一張n列k行的表,每一列對應一個屬性,每一行對應分解中的一個關系模式。若屬性Aj ∈Ui,則在j列i行填上aj,否則填上bij; ② 對於每一個FDi做如下操作:找到Xi所對應的列中具有相同符號的那些行。考察這些行中li列的元素,若其中有aj,則全部改為aj,否則全部改為bmli,m是這些行的行號最小值。 如果在某次更改后,有一行成為:a1,a2,...,an,則算法終止。且分解ρ具有無損連接性,否則不具有無損連接性。 對F中p個FD逐一進行一次這樣的處理,稱為對F的一次掃描。 ③ 比較掃描前后,表有無變化,如有變化,則返回第② 步,否則算法終止。如果發生循環,那么前次掃描至少應使該表減少一個符號,表中符號有限,因此,循環必然終止。
如果軟考中考了,我建議你--直接做下一題。
2,是否保持函數依賴
若F+=F1+∪F2+∪...∪Fk+,則R<U,F>的分解ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}保持函數依賴。
例題:對於屬性集ABCDEF和函數依賴集{A→BC,CD→E,B→D,BE→F,EF→A},說明下列分解a.是否是無損連接分解;b.是否保持函數依賴。
(1){ABCD,EFA}
a.判斷無損連接分解
U1∩U2=A,
U1-U2=BCD,
U2-U1=EF
存在A→BCD∈F+,所以分解是無損連接分解。
b.判斷保持函數依賴
U1=ABCD,F1+={A→BC,B→D}
U2=EFA,F2+={EF→A}
丟失了CD→E,BE→F,因此沒有保持函數依賴。
(1){ABC,BD,BEF}
a.判斷無損連接分解
①構造一個初始的二維表,若“屬性”屬於“模式”中的屬性,則填aj,否則填bij。
②根據A→BC,拆分為A→B,A→C。由於屬性列A上沒有相同的分量,所以表不改變。
③根據CD→E,由於屬性列CD上沒有相同的分量,所以表不改變。
④根據B→D,由於屬性列B上第1、2、3行均相同a2,且這些行所在的D屬性列存在a4,所以將屬性列D上的b14、b34改為同一個符號a4。
⑤根據BE→F,由於屬性列BE上沒有相同的分量,所以表不改變。
⑥根據EF→A,由於屬性列EF上沒有相同的分量,所以表不改變。
經過比較掃描前后的表格有變化,所以進行第二次掃描,第二次掃描表無變化,沒有出現a1,a2,a3,a4,a5,a6,因此不是無損連接分解。
b.判斷保持函數依賴
U1=ABC,F1+={A→BC}
U2=BD,F2+={B→D}
U2=BEF,F3+={BE→F}
丟失了CD→E,EF→A,因此沒有保持函數依賴。