關聯式資料庫 正規化 反正規化的利弊權衡和建議

2021-10-01 04:01:53 字數 2436 閱讀 4354

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則稱zx傳遞函式依賴。

記為: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 第三...

關聯式資料庫的正規化和反正規化設計

關聯式資料庫的正規化和反正規化設計 正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。資料庫的設計正規化是資料庫設計所需要滿足的規範。只有理解資料庫的設計正規化,才能設計出高效率 優雅的資料庫,否則可能會設計出錯誤的資料庫。目前關聯式資料庫有六種正規化 第一正規...