2016.12.6
十九.數據庫設計原理
數據庫設計要解決的兩個問題:
(1)如何把數據組織到一組相關的表中?
(2)在每個表中應該放什麼樣的數據元素?
18.1 規範化
規範化的目標:
(1)消除冗餘數據。
(2)消除插入、刪除和更新異常。
規範化是指在數據庫設計中消除冗餘和更新異常所採取的一系列步驟,這些步驟通常稱爲第一範式,第二範式和第三範式等。當數據是第3範式的形式時,它已經足夠規範了。
規範化數據的3個原則如下:
(1)消除重複數據,意味着不允許多值屬性。若一個數據單元格中有多個值,會給數據檢索造成問題。同時,不允許有重複的列。
(2)消除部分依賴,部分依賴就是指表中的數據和多個實體有關。這條規則表明表中沒有列能夠只和主鍵的一部分相關。表中的所有非鍵列指向的是整個鍵,而不是鍵的一部分。
(3)消除過度依賴。這條規則所指的情況就是表中的列指向的不是主鍵,而是指向的是同一表中的另一個非鍵的列。
18.2 數據庫設計
數據庫設計不止簡單的走完規範化的過程,實際上是一種藝術,它需要結合業務問題來綜合考慮。數據庫的設計往往有多種可能,這取決於實際上如何訪問和修改數據。可以通過提出問題來確定設計是否像需要的一樣靈活和有意義。如:
(1)有其他的表需要添加到數據庫中嗎?
(2)可以把可能聯合的列加到一起嗎?
(3)如何區分舊數據?
(4)對數據有特殊的分析需求嗎?
數據庫設計必須和現實需求結合起來,數據庫設計是一個平衡活,優秀的數據庫設計不僅有足夠的靈活性而且直觀,易於理解。
18.3 規範化的替代方法
規範化是數據庫設計中的重要原則,但是在某些 情況下,切實可行的替代方案可能更合理。例如星型模式。
星型模式的主要思想是創建一個核心的事實表,該表和任意數目的維度表相關聯。事實表包含了本質上是可以相加的所有定量數字。維度表包含了所有的實體信息。
此外,也有從星型數據庫中創建數據立方。