数据关系模式设计的标准化
把關系模式R分解成p以后,如何測試分解p是否為有損分解方法:
1.根據分解模式和屬性列表
列:分解模式
行:屬性
比如R(ABC) 分為p=(AB,AC) ?滿足F(A—>C)
列表
| ? | A | B | C |
| AB | ? | ? | ? |
| AC | ? | ? | ? |
填表
?若分解模式中包含屬性 則填a下標i,i為對應列數。
?若分解模式中不包含屬性 則填b下標為ji,j為行號,i為列號
所以表填完結果為:
| ? | A | B | C |
| AB | a1 | a2 | b13 |
| AC | a1 | b22 | a3 |
?
2.修改表中元素 根據FD X——>Y
若FD X——>Y,則在X屬性列找是否有相同的值:
???若有,則到y屬性下修改。(修改規則:有a則改為和a相同的,沒有a則修改成 b下標小的那個相同。
???若沒有,則不用修改
?
所以例題修改如下F(A——>C)
| ? | A | B | C |
| AB | a1 | a2 | a3 |
| AC | a1 | b22 | a3 |
?
3.若修改的最后一張表格中,有一行全為a,則稱為無損分解,否則為有損分解
所以例題將b13改為a3
所以此題為無損分解
?
?
如何判斷是否保持函數依賴的分解
設F屬性集U上的FD集,Z是U的子集,F在Z上的投影用 兀z(F)①表示
若p=(R1,R2.......)是R的一個分解,F是R上的FD集,如果①式的所有并集 的集合蘊涵F集合,則則稱分解保持函數依賴集
例題 設關系R(ABC),F是R上成立的FD集,F={ B——>C,C——>A},p={AB,AC}是R上的一個分解,那么分解p是否保持FD集F。
1.求F在AB上的投影
兀AB(F)=
AB可以是
A——>B:A的集合閉包:A+=A 沒有B所以不成立
B——>A :B的集合閉包:B+=BCA ??有A所以,成立,則 兀AB(F)={B——>A}
?同樣方法求在AC上的投影
?
兀AC(F)=
AC可以是
A——>C:A+=A ?沒有C所以 不成立
C——>A ?:C+=CA ?有A所以 ?成立
則兀AC(F)={C——>A}
?
2.求投影的并集
兀AB(F)U兀AC(F)={B——>A,C——>A}②
?
3.判斷F是否被②式蘊含
因為都有C——>A,所以F中這個不用判斷,判斷B——>C ?B+=BA ?沒有C
?
?
注意:::判斷閉包時要在②式中判斷。
所以 這個題p不保持FD集G
?
?
?
?
?
怎么求候選鍵
?
①先找到關系R的最大超鍵
例如 R(ABCD) ?F={B——>C,D——>A} ?p={BC,AD}
??最大超鍵就是 ABCD
②
先在每一個F中 通過求閉包方式 劃去冗余的屬性
例如 ?最大超鍵ABCD 先從F中 B——>C 所以把C劃去,再從D——>A 劃去A 所以此時候選鍵有可能是BD,再看從D——>A開始,可以劃去A,再看 B——>C可以劃去C,所以候選鍵可能是BD
③ 把可能候選鍵驗證 看是否候選鍵閉包集是全集U
例如
BD閉包集=ABCD=U,所以BD是候選鍵
?
怎么判斷范式級別?
?
例題 中判斷p中的級別,p={BC,AD}
先在BC,AD在F中做投影,然后在投影的集合中找出候選鍵
主屬性:
如果A是關系模式R的候選鍵中的屬性,那么稱A是R的主屬性,否則A是R的非主屬性。
?
?
第1范式
定義:如果關系模式R的每個關系r的屬性值都是不可分的原子值
?
?
第2范式
定義 ?如果關系模式R是1NF,且每個非主屬性完全函數依賴于候選鍵
?
局部依賴:對于FD,W——>A,如果存在X屬于W,有X——>A成立,那么稱W——>A是局部依賴
否則 完全依賴
?
第3范式
?
設F是關系模式R的FD集,如果對于FD中每個X——>Y,都有X是R的超鍵,或者Y的每個屬性都是主屬性。
?
?
BCNF
?
設F是關系模式R的FD集,如果對于FD中每個X——>Y,都有X是R的超鍵
?
轉載于:https://www.cnblogs.com/fmust/p/9050344.html
總結
以上是生活随笔為你收集整理的数据关系模式设计的标准化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次错误的伪静态配置文件
- 下一篇: 数据库连接池技术,c3p0