2.5. 小結
當一個表是規范的,則其非主碼列依賴于主碼列。從關系模型的角度來看,表滿足3NF最符合標準,這樣的設計容易維護。一個完全規范化的設計并不總能生成最優的性能,因此通常是先按照3NF設計,如果有性能問題,再通過反規范來解決。
數據庫中的數據規范化的優點是減少了數據冗余,節約了存儲空間,相應邏輯和物理的I/O次數減少,同時加快了增、刪、改的速度,但是對完全規范的數據庫查詢,通常需要更多的連接操作,從而影響查詢的速度。因此,有時為了提高某些查詢或應用的性能而破壞規范規則,即反規范。
什么是第三范式
范式是數據庫邏輯模型設計的基本理論,一個關系模型可以從第一范式到第五范式進行無損分解,這個過程也稱為規范化 (Normalize)。在數據倉庫的模型設計中目前一般采用第三范式,它有非常嚴格的數學定義。如果從其表達的含義來看,一個符合第三范式的關系必須具有以下三個條件:
1. 每個屬性的值唯一,不具有多義性;
2. 每個非主屬性必須完全依賴于整個主鍵,而非主鍵的一部分;
3. 每個非主屬性不能依賴于其他關系中的屬性,因為這樣的話,這種屬性應該歸到其他關系中去。
我們可以看到,第三范式的定義基本上是圍繞主鍵與非主屬性之間的關系而作出的。如果只滿足第一個條件,則稱為第一范式;如果滿足前面兩個條件,則稱為第二范式,依此類推。因此,各級范式是向下兼容的。
3. 數據的反規范
3.1. 反規范的好處
是否規范化的程度越高越好?這要根據需要來決定,因為“分離”越深,產生的關系越多,關系過多,連接操作越頻繁,而連接操作是最費時間的,特別對以查詢為主的數據庫應用來說,頻繁的連接會影響查詢速度。所以,關系有時故意保留成非規范化的,或者規范化以后又反規范了,這樣做通常是為了改進性能。例如帳戶系統中的“帳戶”表B-TB01,它的列busi-balance(企業帳戶的總余額)就違反規范,其中的值可以通過下面的查詢獲得:
select busi-code,sum(acc-balance)
from B-TB06
group by busi-code
如果B-TB01中沒有該列,若想獲得busi-name(企業名稱)和企業帳戶的總余額,則需要做連接操作:
select busi-name,sum(acc-balance)
from B-TB01,B-TB06
where B-TB01.busi-code=B-TB06.busi-code
group by busi-code
文章來源于領測軟件測試網 http://www.kjueaiud.com/