我們在
概要設計階段解決了客戶的需求,並繪製了 E-R圖。邏輯結構設計的任務,就是把在概要結構設計階段建立的基本 E-R 圖,按選定的關係數據模型的原則轉換成相應的數據庫模型圖。
本節將介紹如何將 E-R圖轉化爲關係模型和數據庫模型圖,下一節我們介紹如何判斷數據表結構設計是否規範。
關係數據庫模式
用二維表的形式表示實體與實體間關係的數據模型稱爲關係模型。關係數據庫模式是對關係數據庫結構的描述,或者說是對關係數據庫框架的描述。一個關係通常對應一張表。
一般情況下,我們把關係模式表示爲
R(U)
或
R(A,B)
。其中,R 表示關係名,U 表示屬性集合,A、B 代表 U 中的屬性。
將 E-R 圖轉換爲關係模式的步驟如下。
1)把每個實體都轉化爲關係模式 R(A,B) 形式
以酒店管理系統爲例,實體“客人”和“客房”分別可以使用關係模式表示如下。
-
客房(客房號,客房描述,客房型別,客房狀態,牀位數,入住人數,價格)。
-
客人(客人編號,客人姓名,身份證號,入住日期,結賬日期,押金,總金額)。
2)建立實體間關係的轉換
實體間的關係分成一對一、一對多、多對多三種,當兩個實體各自轉化爲關係模式後,實體間關係的轉換如下。
-
一對一的轉換:把任意實體的主鍵放到另一個實體的關係模式中。
-
一對多的轉換:把關係數量爲 1 的實體的主鍵放到關係數量爲 N 的實體關係模式中。
-
多對多的轉換:把兩個實體中的主鍵和關係的屬性放到另一個關係模式中,會多生成一個關係模式。
酒店管理系統中客房與客人的關係爲一對多關係,轉換後的結果如下。
-
客房(客房號,客房描述,客房型別,客房狀態,牀位數,入住人數,價格)。
-
客人(客人編號,客人姓名,身份證號,入住日期,結賬日期,押金,總金額,客房號)。
上述關係模式中含有下劃線的屬性代表主屬性,在表中作爲主鍵,加粗屬性爲外來鍵。
數據庫模型圖
數據庫模型圖主要用來說明數據庫有哪些表,表中有哪些屬性以及表與表之間的關聯關係。
將 E-R 圖轉化爲數據庫模型圖主要執行以下 4 步:
-
在 Visio 中新建數據庫模型圖
-
新增實體,將 E-R圖中各實體轉化爲對應的表
-
將各屬性轉化爲各表對應的列,定義欄位名稱、數據型別等
-
新增實體之間的對映關係
新增實體之間的對映關係,具體步驟如下:
-
新增 GuestRecord(客人)實體和 Room(客房)實體。
-
爲 GuestRecord 表新增外來鍵約束列 RoomID(客房號),對應 Room 表中的 RoomID 列。
爲了數據編碼的相容性,建議使用英文欄位。爲了直觀可見,我們在英文括號內註明了對應的中文含義。下面 下麪將 E-R 圖中的“客房”和“客人”兩個實體轉換爲數據庫模型圖,如下圖所示。
圖中的 PK 表示表的主鍵列,FK 表示外來鍵列。需要注意的是,表中的 ID 編號列只能用作主鍵或外來鍵,否則該列沒有實際含義。如客人表中的 GuestID 列,客房表中新增的 RoomID 列。
在數據庫模型圖中也可以很好的體現實體之間的對映關係。比如,客房和客人之間是一對多關係,對於一對多關係的兩個實體,一般會各自轉換爲一張表,並且後者對應的表參照前者對應的表,即客人(GuestRecord)表中的客房號來自客房(Room)表中的客房號,它們之間應建立主鍵、外來鍵關係,如上圖所示。
一般來說,一對多關係是一個表中的主鍵對應另一個表中可重複欄位,主鍵的值是不能重複的,而關聯的欄位是可以重複的,這樣就會存在一個值對應一個值或者一個值對應多個值。在一對一關係中,一般是一個主鍵對應一個不可重複的欄位,顯然只能一個值對應一個值。
多對多對映關係也是比較常見的。要表示多對多關係,除了將多對多關係中的兩個實體各自轉換爲表外,一般還會建立第三個表,稱爲連線表。它將多對多關係劃分爲兩個一對多關係,並且將這兩個表的主鍵都插入到第三個表中。
例如,訂單表和產品表有多對多關係,這種關係通常通過與“訂單明細”表建立兩個一對多關係來定義。一個訂單可以有多個產品,每個產品可以出現在多個訂單中。關於這一點可以在以後的數據庫設計範例中慢慢理解。