2014年8月31日 星期日

製作ER圖的4個簡單步驟

中午12:02 Posted by Envisioning U-Commerce Lab


超IT綜合情報技術網「製作ER圖的4個簡單步驟」文章點出最重要的概念:
1. 掌握業務流程和規則
2. 從中抽出「實體」
3. 檢核抽出的「實體」是否有不足或多餘的
4. 最後設定實體的「關聯」






Step 1 掌握業務流程和規則
以網路購物流程為範例,掌握到整體的流程以及需求如下:
No.業務流程需求
1
商品放入購物車

允取選購多項商品,刪除、新增商品,修改數量。
2
選擇配送方式

可以選擇門市取貨、宅配等。
3下單前確認顧客資料

需要先有會員資料。
4
選擇付款方式

可以選擇信用卡、銀行匯款等。
5
選擇配送地點

可以選擇顧客原住址,以及指定其他地點。
6
指定時間
可以指定配送日和時間帶。

Step 2 抽出實體
「實體」(entity)為特定目地的集合。上述每個業務流程畫面亦有特定目地,因此可以每個流程給予一個對應的「實體」。進而根據每一個「實體」的需求定義其屬性。
No.業務流程對應實體實體的屬性值
1商品放入購物車商品商品ID、商品名、單價、折扣、廠商ID
2
選擇配送方式
配送方式配送ID、配送方式
3下單前確認顧客資料

顧客顧客ID、顧客名稱、郵遞區號、住址、電話
4選擇付款方式付款方式付款ID、付款方式
5選擇配送地點配送地點
6指定時間配送時間營業時間帶ID、時間帶、營業日


Step 3 檢核抽出實體
檢核抽出的實體缺了甚麼或多了甚麼?從上一步驟抽出的實體可以看出有些很難建立彼此的關聯,例如「商品」和「配送方式」實體。仔細再檢討之後,結果發現忘記最重要的「訂購單」這個實體,它是作業流程最後必須要產出的實體。在下步驟會做說明,有了「訂購單」的實體之後,實體的關聯就可以建立起來了。一般我們稱「訂購單」的實體為「事件系實體」(Event Entity),其他上述的實體為「資源系實體」(Resource Entity)。另外,根據關聯資料的正規化之後,「訂購單」這個實體最後會被分為兩個實體。
第5個實體「配送地點」,如果通常是選擇顧客原地址,例外情形才會選擇其他地方,因此不用特別建立實體,直接放入事件系實體的「訂購單」內即可。
第6個實體「配送時間」,不是顧客決定的,必須根據物流公司的「營業時間」和「配送的時間帶」來設定。「營業時間」和「配送的時間帶」沒有甚麼關聯,因此把它拆成2個實體。最後得到結果如下:
No.業務流程對應實體實體的屬性值
1商品放入購物車商品商品ID、商品名、單價、折扣、廠商ID
2選擇配送方式配送方式配送ID、配送方式
3下單前確認顧客資料顧客顧客ID、顧客名稱、郵遞區號、住址、電話
4選擇付款方式付款方式付款ID、付款方式
5指定時間配送時間帶配送時間帶ID、配送時間帶
6指定時間營業日年月日、Flag
7訂單確認訂購單訂單ID、日期、金額、郵遞區號、配送地點、電話
8訂單確認訂購單明細商品ID、數量、金額

Step 4 設定實體的關聯
關聯資料所需「實體」確定之後,開始設定「實體」和「實體」之間的關聯。設定關聯時,首先是設定「主Key」(Primary Key),接著設定實體之間的對等關係(1對1、1對多、多對多)。以下利用「商品」和「訂單明細」的兩個實體,以及「訂單明細」和「訂單」的兩個實體為範例,來建立ER圖。四方形代表「實體」,菱形代表兩「實體」的關聯,橢圓代表實體的屬性。綠色網底的屬性為,建立關聯Key值。

「訂單」和「訂單明細」的"訂單號碼"屬性是唯一的,因此設定為兩個實體的主Key,建立彼此的關聯。不過,1筆訂單往往不只1筆資料,「訂單明細」必須還要有1個主Key,才不會發生主Key重複的現象。同一訂單若不允取選取2個以上相同商品時,可以選擇商品ID當另1個主Key,否則選擇"訂單明細號碼"屬性做為另1個主Key較為適當。主Key設定好之後,接著設定兩個實體的對等關係,從「訂單」來看「訂單明細」,1筆訂單有多筆明細,因此是1對N的對等關係,從「訂單明細」來看「訂單」則是N對1的對等關係。
「訂單明細」和「商品」的"商品ID"屬性是唯一的,因此設定為兩個實體的「主Key」(Primary Key),建立彼此的關聯。不過我們在「訂單明細」選擇"訂單號碼"和"訂單明細號碼"做為主Key,"商品ID"就做為外部連結用的「外部Key」(FK),和「商品」建立關聯。從「商品」來看「訂單明細」,1筆商品對應到多筆訂單明細,因此是1對N的對等關係,從「訂單明細」來看「商品」則是N對1的對等關係。
依此類推,其他實體間的關聯和對等關係如下圖:

由上圖得知「訂單」實體要和其他實體建立關聯,還必須多增加"配送ID"、"顧客ID"、"付款ID"、"時間帶ID"、"年月日"等屬性做為「外部Key」(FK)。
最後得到的全體的ER圖為






同樣的,在「How to Draw E R Diagram 」文章也提到類似原則:

Step 1. Identify the entities of the database according to the requirement of the organization or business. 
  • There are some general guidelines for naming the entities. The name of the entity should be a singular noun, concise (for ease); if abbreviations are used then it should be specific
  • Spaces should be avoided. If more than one word is used then it should be separated by underscore ( _ ).

Step 2. Define the characteristics of the entities by attributes  •The attributes can be singular noun or noun phrase
  • It should be unique for a particular entity type

Step 3. Build meaningful relationship among instances of one or more entities by creating relationship between them. The relationships mirror business rules of the organization •The relationship should be a verb phrase
  • It should clearly explain the action being taken
  • Cardinality - The relation can have one-to-one (1:1), one-to-many (1: m) or many-to-many (m: n) characteristics.