通俗地理解數據庫設計的三個範式

通俗地理解三個範式,對於數據庫設計大有好處。在數據庫設計中,爲了更好地應用三個範式,就必須通俗地理解三個範式(通俗地理解是夠用的理解,並不是最科學最準確的理解):

第一範式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;

第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;

第三範式:3NF是對字段冗餘性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗餘。

沒有冗餘的數據庫設計可以做到。但是,沒有冗餘的數據庫未必是最好的數據庫,有時爲了提高運行效率,就必須降低範式標準,適當保留冗餘數據。具體做法是:在概念數據模型設計時遵守第三範式,降低範式標準的工作放到物理數據模型設計時考慮。降低範式就是增加字段,允許冗餘。

基本表及其字段之間的關係, 應儘量滿足第三範式。但是,滿足第三範式的數據庫設計,往往不是最好的設計。爲了提高數據庫的運行效率,常常需要降低範式標準:適當增加冗餘,達到以空間換時間的目的。

〖例2〗:有一張存放商品的基本表,如表1所示。“金額”這個字段的存在,表明該表的設計不滿足第三範式,因爲“金額”可以由“單價”乘以“數量”得到,說明“金額”是冗餘字段。但是,增加“金額”這個冗餘字段,可以提高查詢統計的速度,這就是以空間換時間的作法。

在Rose 2002中,規定列有兩種類型:數據列和計算列。“金額”這樣的列被稱爲“計算列”,而“單價”和“數量”這樣的列被稱爲“數據列”。

主鍵與外鍵在多表中的重複出現, 不屬於數據冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵字段的重複出現, 纔是數據冗餘!而且是一種低級冗餘,即重複性的冗餘。高級冗餘不是字段的重複出現,而是字段的派生出現。

商品中的“單價、數量、金額”三個字段,“金額”就是由“單價”乘以“數量”派生出來的,它就是冗餘,而且是一種高級冗餘。冗餘的目的是爲了提高處理速度。只有低級冗餘纔會增加數據的不一致性,因爲同一數據,可能從不同時間、地點、角色上多次錄入。因此,我們提倡高級冗餘(派生性冗餘),反對低級冗餘(重複性冗餘)。

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章