資料庫設計/ER建模
為實體關係 (ER) 模型開發的一個重要理論涉及函式依賴 (FD) 的概念。 學習這個理論的目的是為了提高你對資料之間關係的理解,並獲得足夠的正式性來幫助實際資料庫設計。
與約束一樣,FD 來自應用領域的語義。本質上, 函式依賴描述了各個屬性是如何相關的。FD 是關係中屬性之間的一種約束,有助於構建良好的關係模式設計。在本章中,我們將探討
- 函式依賴的基本理論和定義
- 用於改進模式設計的方法,也稱為規範化
通常,良好的關係資料庫設計必須捕獲所有必要的屬性和關聯。設計應該以最少的資訊儲存量和沒有冗餘資料來做到這一點。
在資料庫設計中,冗餘通常是不希望的,因為它會導致更新後維護一致性方面的問題。但是,冗餘有時會導致效能提高;例如,當冗餘可以代替連線來連線資料時。連線用於根據兩個相關表獲取資訊。
考慮圖 10.1: 客戶 1313131 顯示了兩次,一次是賬戶號 A-101,一次是賬戶 A-102。在這種情況下,客戶號並不冗餘,儘管表中存在刪除異常。擁有單獨的客戶表可以解決這個問題。但是,如果分支地址發生變化,則需要在多個地方更新它。如果客戶號保留在表中,那麼就不需要分支表,也不需要連線,從而提高了效能。
圖 10.1. 使用銀行賬戶和分支的冗餘示例。
當你在表中插入不一致的資訊時,就會發生插入異常。當我們插入新記錄時,例如圖 10.2 中的賬戶號 A-306,我們需要檢查分支資料是否與現有行一致。
圖 10.2. 插入異常示例。
如果分支地址發生變化,例如圖 10.3 中的 Round Hill 分支,我們需要更新所有引用該分支的行。錯誤地更改現有資訊稱為更新異常。
圖 10.3. 更新異常示例。
當刪除可能包含不應刪除的屬性的記錄時,就會發生刪除異常。例如,如果我們刪除有關某個分支的最後一個帳戶的資訊,例如圖 10.4 中 Downtown 分支的帳戶 A-101,所有分支資訊都會消失。
圖 10.4. 刪除異常示例。
刪除 A-101 行的問題是我們不知道 Downtown 分支位於何處,我們丟失了關於客戶 1313131 的所有資訊。為了避免這類更新或刪除問題,我們需要將原始表分解成幾個較小的表,其中每個表與其他表的重疊最小。
每個銀行帳戶表必須包含有關一個實體的資訊,例如圖 10.5 中顯示的 分支或客戶。
圖 10.5. A. Watt 所示的每個銀行帳戶表都包含一個實體。
遵循此做法將確保在新增或更新分支資訊時,只會影響一條記錄。因此,當新增或刪除客戶資訊時,分支資訊不會被意外修改或記錄錯誤。
圖 10.6 顯示了一個員工專案表的示例。從該表中,我們可以假設
- EmpID 和 ProjectID 是一個組合主鍵。
- 專案 ID 決定預算(即,專案 P1 的預算為 32 小時)。
圖 10.6. A. Watt 所示的員工專案表示例。
接下來,讓我們看看在以下步驟中,該表可能會發生的一些可能的異常。
- 操作:新增行 {S85,35,P1,9}
- 問題:有兩個元組的預算衝突
- 操作:刪除元組 {S79, 27, P3, 1}
- 問題:步驟 #3 刪除了專案 P3 的預算
- 操作:將元組 {S75, 32, P1, 7} 更新為 {S75, 35, P1, 7}
- 問題:步驟 #5 為專案 P1 的預算建立了兩個元組,其值不同
- 解決方案:為專案和員工分別建立一個單獨的表,如圖 10.7 所示。
圖 10.7. 解決方案:A. Watt 所示的為專案和員工分別建立單獨的表。
建立沒有異常的表的最佳方法是確保表已規範化,這是透過理解函式依賴來實現的。FD 確保表中的所有屬性都屬於該表。換句話說,它將消除冗餘和異常。
圖 10.8. A. Watt 所示的分離專案和員工表及其資料。
透過使用單獨的專案和員工表來保持資料分離
- 如果預算發生變化,不會產生任何異常。
- 沒有分配員工的專案不需要虛擬值。
- 如果刪除員工的貢獻,不會丟失任何重要資料。
- 如果新增員工的貢獻,不會產生任何異常。
- 刪除異常
- 當刪除可能包含不應刪除的屬性的記錄時,就會發生
- 函式依賴 (FD)
- 描述了各個屬性是如何相關的
- 插入異常
- 當你在表中插入不一致的資訊時,就會發生
- 連線
- 用於根據兩個相關表獲取資訊
- 更新異常
- 錯誤地更改現有資訊
- 將圖 10.9 規範化。 圖 10.9. 第 1 題的表格,由 A. Watt 提供。
- 為線上電影租賃服務建立邏輯 ERD(沒有多對多關係)。 使用以下操作描述作為您的業務規則的基礎:線上電影租賃服務根據電影型別對電影標題進行分類:喜劇、西部片、古典片、科幻片、卡通片、動作片、音樂劇和新上映。 每個型別包含許多可能的標題,大多數型別的標題都有多個副本。 例如,請注意以下摘要:型別 標題 音樂片 我的窈窕淑女 (副本 1) 我的窈窕淑女 (副本 2) 俄克拉荷馬州 (副本 1) 俄克拉荷馬州 (副本 2) 俄克拉荷馬州 (副本 3) 等等
- 資料冗餘可能導致哪些三種資料異常? 如何消除這些異常?
另請參閱 附錄 B:ERD 示例練習
資料庫設計(包括影像,除非另有說明)的這一章是 Nguyen Kim Anh 編寫的關係設計理論的衍生作品,根據知識共享署名許可 3.0 許可釋出
以下材料由 Adrienne Watt 撰寫
- 示例:員工專案表和異常
- 如何避免異常
- 關鍵詞
- 練習