資料庫學習六 資料庫設計

📢 本文由 gemini-3-flash-preview 翻譯

SQL 系列

資料庫學習一 資料庫導論: https://blog.yexca.net/zh-tw/archives/86
資料庫學習二 關聯模型: https://blog.yexca.net/zh-tw/archives/87
資料庫學習三 SQL 語言: https://blog.yexca.net/zh-tw/archives/88
資料庫學習四 關聯式資料庫理論: https://blog.yexca.net/zh-tw/archives/89
資料庫學習五 範式: https://blog.yexca.net/zh-tw/archives/90
資料庫學習六 資料庫設計: 本文
資料庫學習七 資料庫的控制功能: https://blog.yexca.net/zh-tw/archives/92

資料庫設計的策略

自頂向下與自底向上,通常會綜合使用這兩種方法。

資料庫設計的步驟

新奧爾良法(New Orleans Method)是目前得到公認且較完整、較權威的資料庫設計方法,它將資料庫設計分為四個主要階段:

  1. 用戶需求分析:收集用戶需求,確定系統邊界。
  2. 概念設計:描述概念模型,較理想的是採用 E-R 方法。
  3. 邏輯設計:將 E-R 圖轉換為關聯模式,並進行正規化。
  4. 實體設計:邏輯模型在電腦中的具體實現方案。

接著進行資料庫實施階段與資料庫運行、維護階段。

需求分析階段

需求分析是在專案確定之後,用戶和設計人員對資料庫系統所要涉及的內容(資料)和功能(行為)進行整理與描述,是以用戶的角度來認識系統。

這一過程是後續開發的基礎,之後的邏輯設計實體設計以及應用程式的設計都會以此為依據

  • 需求分析階段的工作:

調查機構情況 → 熟悉業務活動 → 明確用戶需求 → 確定系統邊界 → 分析系統功能 → 分析系統資料 → 編寫分析報告。

  • 需求分析階段的文檔:

需求調查所得到的資料可能是零碎的、局部的,分析師和設計人員必須進一步分析並表達用戶需求,建立需求說明書資料字典資料流程圖

E-R 模型

E-R(實體-關係)模型是概念模型,用來描述現實世界的概念模型。

實體

用矩形表示,矩形框內寫明實體名稱。

關係

用菱形表示,菱形框內寫明關係名稱,並用無向邊分別與有關實體連接起來,同時在無向邊旁邊標註上關係的類型(1 : 1、1 : n、m : n)。

<1> 兩個不同實體之間的關係

  • 一對一 (1 : 1):指實體集 E1 中的一個實體最多只與實體集 E2 中的一個實體相關係。
  • 一對多 (1 : n):表明實體集 E1 中的一個實體可與實體集 E2 中的多個實體相關係。
  • 多對多 (m : n):表明實體集 E1 中的多個實體可與實體集 E2 中的多個實體相關係。

<2> 兩個以上不同實體集之間的關係

兩個以上不同實體集之間存在 1 : 1 : 1、1 : 1 : n、1 : m : n 和 r : n : m 的關係。

<3> 同一實體集內的二元關係

同一實體集內的各實體之間也存在 1 : 1、1 : n 和 m : n 的關係。

屬性

屬性是實體某方面的特性,用橢圓表示,橢圓框內寫明屬性名稱(主屬性的屬性名稱用底線標記),並用無向邊與有關實體連接起來。

每個屬性都有其取值範圍。在同一實體集中,每個實體的屬性及其域(Domain)是相同的,但可能取不同的值。

E-R 模型中的屬性有以下分類:

  1. 簡單屬性和複合屬性

簡單屬性是原子的、不可再分的。複合屬性可以細分為更小的部分(即劃分為別的屬性)。

若無特別聲明,通常指的是簡單屬性。

  1. 單值屬性和多值屬性

單值屬性是定義的屬性對於一個特定的實體都只有單獨的一個值。

多值屬性是定義的屬性對於一個特定的實體有多個值。

  1. NULL 屬性

當實體在某個屬性上沒有值或者屬性值未知時,使用 NULL 值,表示無意義或不知道。

  1. 衍生屬性

衍生屬性可以從其他屬性計算或推導而來。

例如員工有 入職時間工作時長 屬性,則 工作時長 可以由當前時間與 入職時間 之差獲得,這裡 工作時長 就是一個衍生屬性。

弱實體

在現實世界中有一種特殊的關係,這種關係代表實體間的所有依賴。例如,員工與眷屬的關係,眷屬總是屬於某員工的。這種實體對於另一些實體具有很強的依賴關係,即一個實體的存在必須以另一個實體為前提,將這類實體稱為弱實體。

在 E-R 圖中,弱實體使用雙線矩形框表示。

超類別與子類別實體

例如職員實體是飛行員、機修工和管理員實體的超類別(父類別),超類別和子類別之間具有繼承關係。

子類別實體矩形兩邊有豎線,超類別與子類別的連線中有圓圈。

概念結構設計階段

用 E-R 方法建立概念模型。

對需求分析階段所得到的資料進行分類、聚集和概括,確定實體屬性關係。概念結構的具體工作步驟包括選擇局部應用、逐一設計分 E-R 圖和 E-R 圖合併。

需求分析階段 → 抽象資料 → 設計局部視圖 → 合併取消衝突 → 修改重構消除冗餘 → 邏輯結構設計階段。

選擇局部應用

選擇適當層次的資料流程圖,讓這一層的每一部分對應一個局部應用,實現某一項功能。

逐一設計分 E-R 圖

劃分好各個局部應用之後,就要對每一個局部應用逐一設計分 E-R 圖,又稱為局部 E-R 圖。

E-R 圖合併

根據局部應用設計好各局部 E-R 圖之後,就可以對各分 E-R 圖進行合併。合併的目的在於解決分 E-R 圖中相互間存在的衝突,最終構成一張全域 E-R 圖。

分 E-R 圖之間的衝突主要有以下三類:

  1. 屬性衝突

同一屬性可能會存在於不同的分 E-R 圖中,由於設計人員不同或出發點不同,對屬性的類型、取值範圍和資料單位等可能會不一致。這些屬性對應的資料將來只能以一種形式在電腦中儲存,這就需要設計階段進行統一。

  1. 命名衝突

相同的意義在不同分 E-R 圖上有著不同的命名,或是名稱相同的屬性在不同的分 E-R 圖中代表著不同的意義,這些也要進行統一。

  1. 結構衝突

同一實體在不同的分 E-R 圖中有不同的屬性,或是同一對象在某一分 E-R 圖中被抽象為實體,而在另一分 E-R 圖中又被抽象為屬性,需要統一。

邏輯結構設計階段

邏輯結構設計是在概念結構設計的基礎上進行資料模型設計,可以是階層模型、網狀模型和關聯模型。本節介紹如何在全域 E-R 圖基礎上進行關聯模型的邏輯結構設計。邏輯結構設計階段的主要工作步驟包括確定資料模型、將 E-R 圖轉換成為指定的資料模型、確定完整性約束(實體完整性、參照完整性和用戶自定義完整性)和確定用戶視圖。

概念設計階段 → 轉換為資料模型 → 關聯正規化 → 模式優化 → 設計用戶子模式 → 實體設計階段。

E-R 圖關聯模式的轉換

E-R 方法所得到的全域概念模型是對資訊世界的描述,並不適用於電腦處理。為了適合關聯式資料庫系統的處理,必須將 E-R 圖轉換成關聯模式。E-R 圖是由實體、屬性與關係三要素構成,而關聯模式中只有唯一的結構——關聯模式,通常採用以下方法加以轉換:

一、實體向關聯模式的轉換

將 E-R 圖中的實體逐一轉換成為一個關聯模式,實體名稱對應關聯模式的名稱,實體的屬性轉換成關聯模式的屬性,實體識別符(Identifier)就是關聯的鍵(Key)。

二、關係向關聯模式的轉換

  1. 一對一關係的轉換

一種方式是將關係歸併到相關聯的兩個實體的任一方,在待歸併的一方實體屬性集中增加另一方實體的鍵和該關係的屬性即可,歸併後的實體,鍵保持不變。

另一種方式(一般不用)是將關係轉換成一個獨立的關聯模式,關聯模式的名稱取關係的名稱,關聯模式的屬性包括該關係所關聯的兩個實體的鍵及關係的屬性,關聯的鍵取自任一方實體的鍵。

  1. 一對多關係的轉換

一種方式是將關係歸併到關聯的兩個實體中的「多」方,在待歸併的多方實體屬性集中增加「一」方實體的鍵和該關係的屬性即可,歸併後的多方實體鍵保持不變。

另一種方式(一般不用)是將關係轉換成一個獨立的關聯模式,關聯模式的名稱取關係的名稱,關聯模式的屬性取該關係所關聯的兩個實體的鍵及關係的屬性,關聯的鍵是多方實體的鍵。

  1. 多對多關係的轉換

多對多關係只能轉換成一個獨立的關聯模式,關聯模式的名稱取關係的名稱,關聯模式的屬性取該關係所關聯的兩個多方實體的鍵及關係的屬性,關聯的鍵是由多方實體的鍵構成的屬性組。

  1. 多對多對多關係的轉換

與第三種情況大致相同。

  1. 超類別和子類別的轉換

超類別、子類別實體都可轉換為一個關聯,並將超類別實體的主鍵加入子類別實體中。

關聯模式的正規化

  1. 根據語義確定各關聯模式的資料相依性。
  2. 根據資料相依性確定關聯模式的範式(正規形式)。
  3. 如果關聯模式不符合要求,要根據關聯模式的分解演算法對其進行分解,達到 3NF、BCNF 或 4NF。
  4. 關聯模式的評價及修正。

實體設計階段

邏輯設計階段 → 確定資料庫的實體模式 → 評價資料庫的實體模式 → 資料庫實施階段。

資料庫的實施與維護

實體結構設計階段 → 定義資料庫 → 資料裝入與編寫應用程式 → 資料庫試運行 → 資料庫運行維護階段。

This post is licensed under CC BY-NC-SA 4.0 by the author.