如何將ERD轉換為邏輯資料?


(1) 把每個[實體]都做成一個[表單],實體的[屬性]就是[欄位] , 並訂下主鍵(PK)。

例如 : Person (person_id, Name, Lastname, Email, Phone)

(2) 當存在多值屬性時(如Phone),該多值屬性也變成一個表格。

例如 : Person (person_id, Name, Lastname, Email)
以及 Phone (person_id, phone_id, phone_number)

(3) 當出現弱屬性時,該弱屬性可以由其他屬性得知,則該弱屬性不必成為一個欄位。

例如 : age可以由生日計算得知,age則不必成為一個欄位。

(4) 當實體A與實體B為 1:1 時,A表單加上FK連到B表單PK,或是B表單加上FK連到A表單 PK。

A(aid,a1,a2 …, bid) B(bid,b1,b2 …) 或是 A(aid,a1,a2 …) B(bid,b1,b2 …, aid)

以上A表單的bid為FK連接到B表單的bid (PK)
以上B表單的aid為FK連接到A表單的aid (PK)

例如 顧客 ~ 購物車關聯是1:1 (一個購物車對應一個顧客,一個顧客只能有一個購物車)

所以我們可以在購物車表單設一個FK,連結到顧客的PK

或是在顧客表單設一個FK,連結到購物車的PK 

(不過大多都是使用購物車表單設一個FK,連結到顧客的PK)

(5) A實體與B實體為 1:N,B表單加上FK連到A表單的PK。

 A(aid,a1,a2 …) B(bid,b1,b2 …, aid)

以上B表單的aid為FK連接到A表單的aid (PK)

例如 一個顧客可以有多個訂單

因此就在訂單加上FK連到顧客的PK

(6) A實體與B實體為 N:N,AB間的關聯C會變成表單,C表單多出兩個FK,一個到A 一個到B。

A(aid,a1,a2 …) B(bid,b1,b2 …) C(cid,aid,bid …)

例如 老師與課程的關聯,老師可以教授多個不同課程,課程也可以給多個不同老師來教

如此要維護這樣的關係,就必須多出一個表單,假設是[授課表單]

[授課表單] 就會有兩個FK,一個連到老師,一個連到課程。

(7) 如果[關聯]有屬性,則該[關聯]會變成一個[表單],關聯的[屬性]就成為其中[欄位],再加上實體的主鍵為其中的[欄位] 。

例如 ~ 學生以[選課]關連到課程,[選課]是一個關聯,這個關聯產生[成績]這個屬性

也就是[選課]這個關連會變成選課單的表單(table),才有辦法有[成績]這個屬性

張貼留言

0 留言