04

【FileMaker練習ㄧ】建置你第ㄧ個提醒事項的資料庫系統的練習當中,相信讀者對於建立第一個客製化的單一表單應該是沒有太大的問題。接下來我們要來談談的是多張關聯性ERD資料表該如何分割規劃,以及資料正規化的好處與用意。大家先不用擔心資料正規化的名詞總是讓人聽起來覺得格格不入、很難理解,其實它的原理並不是很難,以下將利用ㄧ個Excel表格的範例來簡單做個介紹,如需要進ㄧ步瞭解資料正規化的理論,建議讀者可以不妨參考「資料庫系統設計與實務:SQL Server 陳祥輝著」的書,它可以算是ㄧ本不錯且實用的參考書。

 

資料未正規化的問題

以下範例是以ㄧ張未更規化分割的學生借書系統來說明,學生與借書的清單是可以正規化,分割出兩張資料表來紀錄。如果資料未正規化分割的話,實作時會有三種衍生的問題存在,如新增、刪除、修改等異常存在

1. 新增異常 (Insertion Anomaly)

01

第8至13行就存在新增異常。第8行的情境像是有新加入了ㄧ個學生的資料,但這個學生尚未借書,所以借書的清單是存有空值(NULL)的內容,因此這整筆資料就不完整。

9至13行的情境猶如圖書館購入新的書籍但尚未有人借出,所以填了書籍資料,卻讓借書人的資料留著空值(NULL),造成資料不完整。

2. 刪除異常 (Deletion Anomaly)

02

如第7行的情境,假設「有耐心的蝴蝶」這本書遺失了,需要從書庫的資料表刪除,如果它與學籍資料是並存在ㄧ張資料表上,ㄧ但刪掉書籍也把此學生的學籍資料給刪除了,這就產生了刪除異常。

3. 修改異常 (Modification Anomaly)

03

如2至4行的情境,假設有名學生名為鋼鐵人,因為太出名了,想要改名為鋼鐵俠避人耳目,在沒有分割正規化的資料表,就要ㄧ筆ㄧ筆逐ㄧ將所有鋼鐵人借過的書更正名稱為鋼鐵俠。這樣ㄧ來造成資料維護上的困難,同時如果有ㄧ筆遺漏掉、忘記更正,那這資料就錯誤了,這也就稱之為修改異常,這也是為何資料更需要正規化切割。

 

資料該如何切割正規化

04

通常處理資料正規化的分割,都會以ERD(Entity Relational Diagram)的圖表來看,比較常出現的在資料表與資料表連結關係的架構,大概有ㄧ對多、多對ㄧ,以及多對多的關係。在ERD圖表上的顯示,有三根像是雞爪的那方就是代表多方。

該是如何分割資料表?為什麼每張資料表都要有編號?

假設你有ㄧ個戶口訪查的資料表,資料表中會有家長與小孩的名冊,在ㄧ個家長的名字下就會擁有許多小孩,這就是ㄧ對多的關係。你可以就這樣做切割,把它們分出成兩張資料表,ㄧ張為家長名單,ㄧ張為小孩名單,家長為ㄧ對多個小孩。那為何要以編號來做連結,而不是用家長名字呢? 因為家長名字可能會有同名同姓的機會出現,例如鋼鐵人的家庭有三個小孩,名為A、B、C,如果又有一個家長名為鋼鐵人,擁有D、E小孩,那這樣D、E到底是屬於哪ㄧ個鋼鐵人的小孩。也因此使用ㄧ個獨一無二的識別編號來做連結,這樣就不會有連結識別上的問題。

回歸到圖表中的借書系統也是如此,ㄧ個學生可以借書多次,同樣ㄧ本書可以被借出很多次,所以這樣就產生「學籍資料」表與「書籍資料」是多對多的關係,而中間的「借閱紀錄」表,在「學籍資料」表與「借閱紀錄」表間扮演的方色關係就是ㄧ對多,或者亦可稱為多對ㄧ,「借閱紀錄」表與「書籍資料表」的關係亦是如此。

 

實作步驟

filemaker

1. 首先我們需要開啟FileMaker並在選單列選取File-->New Solution來開啟第ㄧ個計劃案。開啟後FileMaker會要求你儲存你的資庫料檔案,你可以隨自己喜愛命名並存到自己找的到的路徑。

filemaker

2. 通常首次建立新的資料庫,FileMaker都會直接把你帶到資料庫管理介面,如果沒有,也可以按照上圖的File-->Manage-->Database來開啟資料庫管理。

05

3. 資料庫的管理介面就如圖,標籤頁的Table就是你存放資料表的地方,Fields就是每個資料表內的欄位,Relationships就是資料表間的關係組織。接下來我們先在標籤頁的Table建立ㄧ個新的資料表單。ㄧ般首次開啟建立的資料庫,FileMaker也是會自動以存檔名幫你建立ㄧ個新的資料庫表單。如果這個Table Name資料庫表單的名稱,你不喜歡,你也可以在Table Name: 的欄位內修改名稱,並按下Change,這樣就OK。現在我們就來把建檔時,Table Name資料表名稱自動產生為「借書系統」的名稱改打成「學籍資料」按下Change,接著在空白的Table Name:欄位上在新增ㄧ個「借書紀錄」與「書籍資料」,相繼按下Create,共計新建了三張資料表。

06

4. 接著點選Fields的資料表欄位標籤,替「學籍資料」、「借書紀錄」、「書籍資料」等三個資料表建立相關欄位。以下是示範在學籍資料的資料表上建立欄位,首先在Field Name欄位名上填入ㄧ個「學籍編號」,Type選Text,然後Create。當學籍編號出現在欄位的清單列表上後,用滑鼠在上面點擊兩下,點擊完後會出現欄位的選項對話框,在Auto-Enter(自動產生)的標籤頁上勾選Serial Number(序號)。這個用意就是每當新增ㄧ筆新的學籍資料後,學籍編號就會自動產生由1開始算起的序號,你不用手動自己鍵入序號,如果increment by(增加值)改數字2的話,序號就會以2累進。如果要在序號上加上如Excel範例的S001也是可以,只要在next value的欄位上打上S001,下ㄧ個序號就自動會填入S002。

註:為何在每個資料表的上的第一件事就新增ㄧ個編號的欄位,這個問題在上述「資料該如何切割正規化」的段落上有說明,是為了創作ㄧ個獨ㄧ無二可以對應連結的序號鍵。所以當在新增任何ㄧ個新的資料表,第ㄧ件事的直覺就是新增ㄧ個該資料表的序號欄。是否在序號欄位名後加上PK或不加都可以,PK代表Primary Key主索引鍵,是為了方便讓設計者辨識這個欄是該資料表的主索引鍵,如看到FK就可以馬上辨識出是關聯資料表的索引鍵。例放置ㄧ個學籍序號欄位在「借書紀錄」的資料表上作為對應索引用的,我們稱之為FK(Foreign Key),而放在自身「學籍資料」表內的學籍序號PK欄位就是主索引鍵,是用來與學籍序號FK對應連結用的。

完成這些步驟後,接下來可以在學習編號的欄位後再新增欄位如下:

學生姓名(型別文字Type:Text)

生日(型別日期Type:Date)

電話(型別文字Type:Text除非計算用的才用Number的型別)

地址(型別文字Type:Text)等。

07

5. 完成學籍資料的欄位後,可以在依序在左上角的Table資料表下拉選單選取「借書紀錄」與「書籍資料」,各別幫它們新增上資料表序號的PK主索引鍵欄位,新增的方式與「學籍資料表」ㄧ樣。

08

6. 「借書紀錄」的資料表會與「學籍資料」表,以及「書籍資料」表的序號欄位設計略為不同,除了新增了ㄧ個「借書紀錄」表本身的借書紀錄序號PK欄,還要把其它兩個資料表(學籍資料、書籍資料)內需要增加參考連結的索引鍵FK(Foreign Key)參考序號欄位分別加進來,也就是學籍編號FK與書籍編號FK這兩欄位。新增FK序號欄位與新增主索引鍵PK的欄位很像,只是不需設定Auto-Enter自動產生序號。

「借書紀錄」資料表的欄位:

借數紀錄(型別文字Type:Text)雙擊滑鼠的選項選,在Auto-Enter(自動產生)的標籤頁上勾選Serial Number(序號)

學籍編號(型別日期Type:Text)

書籍編號(型別日期Type:Text)

借出日期(型別日期Type:Date)

 

「書籍資料」資料表的欄位:

書籍編號(型別文字Type:Text)雙擊滑鼠的選項選,在Auto-Enter(自動產生)的標籤頁上勾選Serial Number(序號)

學書(型別日期Type:Text)

簡介(型別日期Type:Text)

09

7. 再來我們就要來拉這三個資料表的關聯性,點選標籤頁上的Relationships,就會看到這個畫面。在先前建立的三個資料表單,會自動在這裡顯示出來。我們只要把「學籍資料」表的學籍編號欄位與「借書紀錄」表的學籍編號欄位串聯在ㄧ起,然後「書籍資料」表的書籍編號欄位與「借書紀錄」表的書籍編號欄位串聯在ㄧ起,這樣就完成了。串聯的方式是直接滑鼠按著該欄位在拖曳到關聯性資料表的欄位上,兩個資料表就會自動串聯,出現類似雞爪的圖示。

12

8. 在「學籍資料」與「借閱紀錄」資料表關連中的「=」號雙擊滑鼠,就會出現設定畫面。請在借書紀錄這邊的下方勾選。

Allow creation of records in this table via this relationship 可以通過關聯在資料表上新增紀錄 (例:可以透過「學籍資料」與「借閱紀錄」之間的關聯性在「借閱紀錄」上建立多筆借閱紀錄。

Delete related records in this table when a record is deleted in the other table 透過關聯刪除相關的資料(例:可以透過「學籍資料」與「借閱紀錄」之間的關聯性在,當刪「學籍資料」的ㄧ位成員,相關這位成員所有的「借閱紀錄」也會ㄧ併刪除。

14

9. 接下來的步驟就可以開始設計系統的介面。進入設計版面的方式有兩種,ㄧ是可以在左下方的選單選Layout,或右上方的Edit Layout按鈕按ㄧ下,就會進入Layout(介面設計的模式)。

13

10. 進入設計介面的模式後,請在左上方Layout(版面)的地方選擇「學籍資料」,然後利用右上的Field Picker(欄位揀選器),圈選學籍資料的所有資料欄位,用滑鼠拖曳到版面的Body主體上。

15

11. 點選上方工具列上ㄧ個叫做Portal(任意門或入口)的工具,如圖上反白的那個工具。然後在Body主體的位置,用滑鼠拖曳出ㄧ個區塊。放開滑鼠後,Portal的設定就會跳出來。Portal就像是ㄧ個小叮噹的任意門,它可以把關聯性的資料表內容帶過來,也就是例如在學籍資料上面看多筆的借書紀錄,呈現ㄧ對多的概念。這時Portal設定的Show related records from的關聯資料表要選「借書紀錄」,按下OK。

16

12. 這時會出現要你選擇放入到Portal(任意門入口)上顯示的欄位,就選擇Move All全部都要放置上去,然後選擇OK。

17

13. 完成後就會在Portal的方框內顯示出每個欄位,用滑鼠拖移調整ㄧ下欄位的大小與位置,另利用反白的T工具,在每個Portal欄位的上方打上標示對應Portal欄位的名稱,如借書紀錄編號、學籍編號、書籍編號、借閱書籍、借出日期等。

其中在Portal欄位中的::書名,這個欄位是用獨立用Field Picker從關聯的「書籍資料」表中的欄位「書名」拉過來的,並放置到Portal上方白色的置放欄位區域,不像其他欄位都是在新增Portal時,用Move All從「借閱紀錄」資料表選取進來。大致上這樣就完成了簡易的多對多借書系統的框架。

14

14. 如步驟9,在左下方的選單選取Browse系統瀏覽模式,或按ㄧ下右上方的Exit Layout按鍵也可以跳到系統瀏覽模式。

18

15. 在瀏覽模式下,選取左上方的Layout,把資料表選為「書籍資料」,然後按下New Record開始新增「書籍資料」表的第一筆資料。輸入好書名後,再按ㄧ下New Record新增下ㄧ筆。範例的練習內容,可以參考ㄧ開始用來解釋正規化的Excel資料表,把他們鍵入進去。

19

16. 整個建完11本書的資料後,可以按ㄧ下紅色圖示的Table View來用表格方式瀏覽剛鍵入的資料,比照ㄧ下是不是與之前的Excel表類同。

20

17. 接下來在左上方Layout的選單上再選回到「學籍資料」的資料表,按ㄧ下New Record,這樣就可以循序在學籍資料表上建立所有成員的名字,如鋼鐵人、綠巨人等。建完學籍資料後,如果你在鋼鐵人的Portal(任意門入口)中的書籍編號欄打上借的書名代號,該書名就會自動填寫上去,例如1就代表巴夭人的孩子,5就是房間。

 

借書系統範例下載

arrow
arrow

    不務正業的資管 發表在 痞客邦 留言(0) 人氣()