• 沒有找到結果。

概念層轉邏輯層設計

第五章 資料庫設計

5.2 邏輯層設計書

5.2.1 概念層轉邏輯層設計

由於系統稍嫌龐大,所以只結取出部份要的實體關聯為例;而所 依循的轉換準則如下說明:

1. 移除多對多(M:N)的關係

將多對多的關係轉換成一對多與多對一的關係。

2. 移除複雜的關係

將關聯超過三個實體的以上的關係拆解成多個一對多的關 係,而每個關係只牽涉兩個實體。

3. 移除遞迴的關係

將遞迴關係化為兩個獨立的關係。

4. 移除帶有屬性意義的關係

將此關係轉換成另一個實體。

5. 移除多重值的屬性

將多重值的屬性抽取出來成另一個實體。

6. 重新檢驗一對一(1:1)的關係

檢驗一對一關係,若此二實體代表相同意義,則予以合併。

7. 移除重複的關係

移除意義相同和不需要的的關係,使資料模型簡單化。

5.2.1.1 移除多對多(M:N)的關係

輔助診療

判斷為 開立

症狀 疾病 藥品

一個症狀可能是取多疾病的徵兆,而一個疾病可能有許多症狀;

一個疾病可開立許多藥品,而一種藥品也適用許多疾病。

症狀查疾病

疾病查症狀

疾病查藥品

藥品查疾病 症狀

疾病

藥品 症狀對疾病

疾病對藥品

診療過程

診斷 疾病名稱

診療過程

診療過程中,可以診斷病人同時患不同種類的疾病,而疾病也可 由不同位患者感染。

診斷出

疾病為 病患疾病

診療過程 疾病名稱

5.2.1.2 移除複雜的關係

病歷,基本資料,與看診紀錄

紀錄儲存

病歷

基本資料 看診紀錄

1

1 M

病歷儲存基本資料,也儲存著看診紀錄;將其改為病歷儲存基本 資料,病歷蒐集掛號紀錄。

儲存 蒐集

基本資料

病歷

看診紀錄

5.2.1.3 移除遞迴的關係

於概念層設計中就沒有出現遞迴的關係存在,所以也不需要作移 除修改的動作。

5.2.1.4 移除帶有屬性意義的關係

於概念層設計中就沒有出現帶有屬性的關係存在,所以也不需要 作移除修改的動作。

5.2.1.5 移除多重值的屬性

基本資料

基本資料 特殊疾病

藥物禁忌

基本資料的屬性為病患的姓名、身分證號碼、出生日期、聯絡電 話、聯絡地址等,其中有兩項屬性,特殊疾病和藥物禁忌,屬於多重 值(Multi-value)的屬性,故拆成病患特殊疾病和病患藥物禁忌兩個 實體。

生理疾病 藥物問題

基本資料

病患特殊疾病 病患藥物禁忌

5.2.1.6 重新檢驗一對一(1:1)的關係

病患,病歷與基本資料

留於診所

儲存 病歷

病患 基本資料

病患,病歷,基本資料,三者的關係皆為一對一,且屬於強關係 (Total to Total),在系統中,代表著相同意義,則由病患資料實體 取代三者。

病患資料

看診紀錄與掛號表

當日看診

看診紀錄 掛號表

看診紀錄與掛號表雖然是一對一的關係,但屬弱關係(Partial to Partial),且其中並無誰為弱實體。交易特性為有掛號紀錄但尚未就 診(1:0);掛號紀錄因年代久遠而刪除,看診紀錄仍留存著(0:1)。

所以最後仍保留原來關係。

5.2.1.7 移除重複的關係

病患,看診紀錄,掛號表

看診紀錄 掛號表

病患

接受醫療 登記掛號 1 1

M M

當日看診 1 1

如上圖,「看診紀錄」可由「接受醫療」這關係找到「病患」,

再經由「登記掛號」關係查得「掛號表」;這樣的行為同質於「看診 紀錄」透過「當日看診」查得「掛號表」。理論上是如此,但實質上 則有待商確,如「看診紀錄」透過「病患」查得「掛號表」這條路徑 是經過多對一與一對多的關係,而「當日看診」的關係則是一對一關 係。再者,之間的查詢工作量和耗損時間也差距頗大。

評估過後,仍是依循原設計不異動。

5.2.1.8 最後步驟

轉化成實體表格的工作,共有三大步驟:

1 將強實體轉化為資料表格 病患資料

「病患資料」為強實體,故直接轉化成資料表格。

2 將弱實體轉化為資料表格 病患特殊疾病

「病患特殊疾病」為弱實體,在將屬性轉為欄位的同時,也必須 將關聯上的擁有者實體(owner entity)主鍵加入,成為自己的連外 鍵(foreign key)。

Primary Key 病患身分證字號

PATIENT (p_id, p_name, dob, sex, ins_type_id, tel, addr, sp_name, sp_tel, first_visit_date, last_visit_date) Primary Key (p_id)

病患特殊疾病(病患身分證字號,序號,疾病,備註)

Primary Key 病患身分證字號,序號

Foreign Key 病患身分證字號 reference 病患資料(病患身分 證字號)

PAT_SP_DISEASE (p_id, sn, sick_id, sick_name, ps) Primary Key p_id, sn

Foreign Key p_id references PATIENT(p_id)

病患資料(病患身分證字號,姓名,出生日期,性別,保險種類,

聯絡電話,聯絡地址,緊急連絡人,緊急連絡電話,初診 日,最後就診日)

3 轉化關係

<pk> 看診紀錄明細

看診紀錄編號

3.2 轉化一對多關係

相關文件