a->b a和b是兩個屬性集,來自同一關係模式,對於同樣的a屬性值,b屬性值也相同
x->y,如果y是x的子集
x->y,如果y不是x的子集
x->y,如果存在w->y,且w⊂x
在r(u)中,如果x→y(非平凡函式依賴,完全函式依賴),y→z,則稱z對x傳遞函式依賴。
記為:xz
super key:在關係中能唯一標識元素的屬性集
candidate key或key:不含有多餘屬性的super key
primary key:在candidate key 中任選乙個
candidate key中x決定所有屬性的函式依賴是完全函式依賴
包含在任何乙個candidate key中的屬性 ,稱為主屬性
不包含在candidate key中的屬性稱為非主屬性
列不可分
在關係t上有函式依賴集f,f+是f的閉包。
f滿足2nf,當且僅當 每個非平凡的函式依賴x->a(f+),a是單個非主屬性,要求x不是任何key的真子集(有可能是super key,也有可能是非key)。
f滿足3nf,當且僅當 每個非平凡的函式依賴x->a(f+),a是單個非主屬性,要求x是t的super key。
f滿足bcnf,當且僅當 每個非平凡的函式依賴x->a(f+),a是單個屬性,要求x是t的super key。
對於f+中 的任意乙個x->a,如果a是單個屬性,且a不在x中,那麼x一定是t的super key。
沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。具體做法是: 在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。降低正規化就是增加字段,減少了查詢時的關聯,提高查詢效率,因為在資料庫的操作中查詢的比例要遠遠大於dml的比例。但是反正規化化一定要適度,並且在原本已滿足三正規化的基礎上再做調整的。
car_id
car_name1c1
2c23c3
teacher
teacher_id
teacher_name1t1
2t23t3
4t4合併後car_and_teacher
car_id
car_name
teacher_id
teacher_name1c1
1t12c2
2t23c3
3t3null
null4t4
問題:會產生大量空值,若兩邊都部分參與則不能合併;
部分參與為大部分參與時比較適合pattern1
兩表連線時複製非鍵屬性以減少連線
例:查詢學生以及所在學院名,可以在學生表中不僅儲存學院id,並且儲存學院名
faculty
fidfname1f1
student
sidsname
fidfname1s1
1f1維護時:
1)如果在ui中,只允許使用者進行選擇,不能自行輸入,保證輸入一致性
2)如果是程式設計師,對於類似學院名這種一般不變的**表,在修改時直接對兩張表都進行修改;如果經常變化,則可以加乙個觸發器。
把另一張表的主鍵複製變成外來鍵
應用後:
通常對於乙個多值屬性,值不太多,且不會經常變,可以在表中建立多個有關此屬性的列
address1 | address2 | address3 | address4
為了解決查詢和更新之間不可調和的矛盾,可以將更新和查詢放在兩張表中,從工作表中提取查詢表,專門用於查詢。只適用於查詢實時性不高的情況。
水平拆分
垂直拆分
關聯式資料庫的正規化和反正規化設計
正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率 優雅的資料庫,否則可能會設計出錯誤的資料庫。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三...
關聯式資料庫的正規化和反正規化設計
正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率 優雅的資料庫,否則可能會設計出錯誤的資料庫。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三...
關聯式資料庫的正規化和反正規化設計
關聯式資料庫的正規化和反正規化設計 正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率 優雅的資料庫,否則可能會設計出錯誤的資料庫。目前關聯式資料庫有六種正規化 第一正規...