跳轉到內容

資料庫設計/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 顯示了一個員工專案表的示例。從該表中,我們可以假設

  1. EmpID 和 ProjectID 是一個組合主鍵。
  2. 專案 ID 決定預算(即,專案 P1 的預算為 32 小時)。

圖 10.6. A. Watt 所示的員工專案表示例。

接下來,讓我們看看在以下步驟中,該表可能會發生的一些可能的異常。

  1. 操作:新增行 {S85,35,P1,9}
  2. 問題:有兩個元組的預算衝突
  3. 操作:刪除元組 {S79, 27, P3, 1}
  4. 問題:步驟 #3 刪除了專案 P3 的預算
  5. 操作:將元組 {S75, 32, P1, 7} 更新為 {S75, 35, P1, 7}
  6. 問題:步驟 #5 為專案 P1 的預算建立了兩個元組,其值不同
  7. 解決方案:為專案和員工分別建立一個單獨的表,如圖 10.7 所示。

圖 10.7. 解決方案:A. Watt 所示的為專案和員工分別建立單獨的表。

如何避免異常

[編輯 | 編輯原始碼]

建立沒有異常的表的最佳方法是確保表已規範化,這是透過理解函式依賴來實現的。FD 確保表中的所有屬性都屬於該表。換句話說,它將消除冗餘和異常。

示例:分離專案和員工表

[編輯 | 編輯原始碼]

圖 10.8. A. Watt 所示的分離專案和員工表及其資料。

透過使用單獨的專案和員工表來保持資料分離

  1. 如果預算發生變化,不會產生任何異常。
  2. 沒有分配員工的專案不需要虛擬值。
  3. 如果刪除員工的貢獻,不會丟失任何重要資料。
  4. 如果新增員工的貢獻,不會產生任何異常。

關鍵詞

[編輯 | 編輯原始碼]
刪除異常
當刪除可能包含不應刪除的屬性的記錄時,就會發生
函式依賴 (FD)
描述了各個屬性是如何相關的
插入異常
當你在表中插入不一致的資訊時,就會發生
連線
用於根據兩個相關表獲取資訊
更新異常
錯誤地更改現有資訊
  1. 將圖 10.9 規範化。 圖 10.9. 第 1 題的表格,由 A. Watt 提供。
  2. 為線上電影租賃服務建立邏輯 ERD(沒有多對多關係)。 使用以下操作描述作為您的業務規則的基礎:線上電影租賃服務根據電影型別對電影標題進行分類:喜劇、西部片、古典片、科幻片、卡通片、動作片、音樂劇和新上映。 每個型別包含許多可能的標題,大多數型別的標題都有多個副本。 例如,請注意以下摘要:型別 標題 音樂片 我的窈窕淑女 (副本 1) 我的窈窕淑女 (副本 2) 俄克拉荷馬州 (副本 1) 俄克拉荷馬州 (副本 2) 俄克拉荷馬州 (副本 3) 等等
  3. 資料冗餘可能導致哪些三種資料異常? 如何消除這些異常?

另請參閱  附錄 B:ERD 示例練習

資料庫設計(包括影像,除非另有說明)的這一章是 Nguyen Kim Anh 編寫的關係設計理論的衍生作品,根據知識共享署名許可 3.0 許可釋出

以下材料由 Adrienne Watt 撰寫

  1. 示例:員工專案表和異常
  2. 如何避免異常
  3. 關鍵詞
  4. 練習

參考資料

[編輯 | 編輯原始碼]
華夏公益教科書