試試看!
資料庫和 Web App 可以讓您獲得大量商業優勢。 無論您想要管理員工資訊、根據資料提供週報表或追蹤客戶訂單,資料庫設計對於達成您的目標而言至關重要。 投入時間了解資料庫設計,將可協助您第一次建立資料庫就獲得成功,並且因應變更的需求而調整。
重要: Access Web App 與電腦資料庫不同。 本文不討論 Web App 設計。
概念與詞彙
現在就讓我們開始學習一些基本詞彙與概念。 為設計實用的資料庫,您需要建立將焦點集中在一個主體的資料表。 在您的資料表中,您在欄位中擷取該主體需要的所有資料,盡可能保存最小的資料單位。
關聯式資料庫 |
一個將資料分割成多個「資料表」的資料庫,有點類似試算表。 每個資料表都只有一個主體,例如客戶 (一個資料表) 或產品 (另一個資料表)。 |
記錄與欄位 |
將離散型資料儲存在資料表中。 資料列 (或稱「記錄」) 儲存每個唯一的資料點,例如客戶名稱。 資料行 (或稱「欄位」) 將每個資料點的擷取資訊分離為盡可能最小的單位 — 名字可能是一欄,而姓氏可能是另一欄。 |
主索引鍵 |
確保每一筆記錄都是唯一記錄的值。 例如,可能有兩個客戶有相同的姓名:Elizabeth Andersen。 但其中一個 Elizabeth Andersen 記錄具有數字 12 做為其主索引鍵,而另一個則具有 58 的主索引鍵。 |
父子式關聯性 |
資料表之間的共同關聯。 例如,單一客戶可以有多筆訂單。 父資料表有主索引鍵。 子資料表有「外部索引鍵」,這些是來自主索引鍵的值,它們顯示子資料表記錄如何連結到父資料表。 這些索引鍵是由「關聯」連結。 |
什麼是良好的資料庫設計?
良好資料庫設計的兩個基本原則為:
-
避免重複的資訊 (亦稱為冗餘資料)。 這會浪費空間且可能容易造成錯誤。
-
確保資料正確且完整。 不完整或錯誤的資訊遍布於查詢和報表中,而且可能最終會導致誤導的決策。
協助處理這些問題:
-
將資料庫資訊分割成具有窄焦點的主體型數據表。 避免重複多個數據表中的資訊。 (例如,客戶名稱應該只會出現在一個數據表中。)
-
使用索引鍵將資料表結合在一起 (而不是重複存放資料)。
-
包含可支援及確保資料庫資訊之正確性與完整性的程序。
-
在設計資料庫時,請考慮到您的資料處理與報告需求。
若要改善資料庫的長期實用性,請按照下列五個設計步驟進行:
步驟 1:決定資料庫的用途
開始之前,請確立資料庫的目標。
若要讓設計集中,請建立資料庫用途摘要並時常參考摘要。 例如如果您想要有適用於家庭式業務的小型資料庫,您可以撰寫簡單的內容,像是「客戶資料庫保存客戶資訊清單,用於產生郵件和報表的用途」。 對於企業資料庫,您可能需要多個段落來描述各種角色的人員將使用資料庫及其資料的時機與方式。 建立特定且詳細的任務聲明,以供設計程序中隨時參考。
步驟 2:尋找及整理需要的資訊
收集您要記錄的所有類型資訊,例如產品名稱與訂單編號。
從現有資訊和追蹤方法開始。 例如,也許您目前將訂購單記錄在總帳中,或者您將客戶資訊保存在書面表單上。 使用那些來源列出您目前擷取的資訊 (例如,表單上的所有方塊)。 針對您目前未擷取重要資訊之處,思考您需要哪些離散型資訊。 每個個別資料類型都會變成您資料庫中的欄位。
不用擔心您的第一份清單不夠完美,您之後可以隨時微調。 但請確實考慮所有會用到此資訊的人員,並詢問他們的想法。
接下來,思考您想要從資料庫中獲得什麼,以及您想要產生的報表或郵件類型。 接著,確定您擷取符合那些目標所需的資訊。 例如,如果您想要報表依地區顯示銷售額,您需要擷取地區層級的銷售資料。 依照您希望呈現的結果,嘗試用實際資訊勾勒報表。 接著,列出建立報表所需的資料。 針對郵件或其他您想要從資料庫獲得的輸出,執行同樣的動作。
範例
假設您提供客戶機會加入 (或退出) 定期電子郵件更新,而您想要列印那些已加入者的清單。 您在「客戶」資料表中需要有「傳送電子郵件」資料行,並且可允許的值為「是」與「否」。
對於那些願意收到電子郵件的人,您需要電子郵件地址,而這也需要一個欄位。 如果您想要包含適當的稱謂 (例如先生、夫人或小姐),請包含「稱謂」欄位。 如果您想要在電子郵件中稱呼客戶的名字,請新增「名字」欄位。
提示: 請記得將各個資訊分成最小的可用部分,例如客戶資料表中的名字和姓氏。 一般而言,若要根據資訊項目 (例如客戶姓氏) 排序、搜尋、計算或報告,您應該將該項目放在自己的個別欄位中。
步驟 3:將資訊分割成多個資料表
將您的資訊項目分割成主要實體或主體,例如產品、客戶與訂單。 每個主體都會變成資料表。
在擁有需要的資訊清單之後,請決定您需要用來整理資料的主要實體 (或主體)。 避免在各個實體重複資料。 例如,產品銷售資料庫的初步清單看起來可能像這樣:
主要實體為:客戶、供應商、產品與訂單。 因此請從這四個資料表開始進行:一個用於客戶相關事實、一個用於供應商相關事實,依此類推。 這可能不是您的最終設計,但是一個好的起點。
附註: 最佳資料庫會包含多個資料表。 避免將您的所有資訊放在單一資料表中。 這會導致資訊重複、資料庫大小增大,以及錯誤變多。 設計成各個事實只記錄一次。 如果您發現自己重複存放資訊 (例如供應商地址),請調整資料庫結構以將該資訊放在個別的資料表中。
若要了解為何更多資料表比更少資料表好,請考慮此處顯示的資料表:
每一列包含產品與其供應商的相關資訊。 因為您可能有許多來自同一個供應商的產品,供應商名稱與地址資訊必須重複許多次。 這會浪費磁碟空間。 請改為只將供應商資訊單次記錄於個別的「供應商」資料表中,然後將該資料表連結到「產品」資料表。
當您需要修改供應商相關資訊時,此設計的第二個問題也很明顯。 假設您需要變更供應商的地址。 因為地址會顯示在許多地方,您可能不小心在一個地方變更地址,但卻忘了在其他地方變更地址。 將供應商的地址只記錄在一個地方就能解決問題。
最後,假設 Coho Winery 只供應一個產品,而且您想要刪除該產品,但保留供應商名稱與地址資訊。 使用此設計時,您要如何刪除產品記錄,而不會造成供應商資訊遺失? 您無法這麼做。 因為除了供應商相關事實以外,每一筆記錄還包含產品相關事實,所以不可能刪除一個卻同時保留另一個。 若要將這些事實分開保存,請將此資料表分割為二:第一個用於產品資訊,而第二個用於供應商資訊。 接著,當您刪除產品記錄時,您只會刪除產品相關事實,而不會刪除供應商相關事實。
步驟 4:將資訊項目轉變成資料行
決定您需要在每個資料表中儲存哪些資訊。 這些離散型資料會變成資料表中的欄位。 例如,「員工」資料表可能包含「姓氏」、「名字」與「雇用日期」等欄位。
在您選擇完資料庫資料表的主體之後,該資料表中的資料行只應儲存該單一主體的相關事實。 例如,產品資料表應只儲存產品相關事實,而非供應商相關事實。
若要決定在資料表中追蹤哪些資訊,請使用您稍早建立的清單。 例如,「客戶」資料表可能包括:「名字」、「姓氏」、「地址」、「傳送電子郵件」、「稱謂」與「電子郵件地址」。 資料表中的每一筆記錄 (客戶) 包含同一組資料行,所以您針對每個客戶儲存相同的資訊。
建立您的第一份清單,然後再檢查及修改,讓它更臻完善。 請記得盡可能將資訊細分為最小的可能欄位。 例如,如果您的第一份清單中有「地址」欄位,請將該欄位細分為「路/街」、「鄉/鎮/市/區」、「省/市」與「郵遞區號」,或者如果是全球性客戶,甚至可細分為更多欄位。 例如,這樣您就可以依正確格式郵寄,或依省/市別報告訂單。
在您修改完每個資料表中的資料行而讓它更臻完善之後,您就可以選擇每個資料表的主索引鍵。
步驟 5:指定主索引鍵
選擇每個資料表的主索引鍵。 主索引鍵 (例如「產品識別碼」或「訂單識別碼」) 會唯一識別每一筆記錄。 如果您還沒有明顯、唯一識別碼,請使用 Access 為您建立一個。
您需要可唯一識別每個資料表中的每一列的方式。 記得在稍早的範例中,兩個具有相同名字的客戶嗎? 因為他們有相同的名字,您需要可個別識別每個個體的方式。
所以每個資料表應包含可唯一識別每一列的資料行 (或一組資料行)。 這稱為「主索引鍵」,且通常是一個唯一的數字,例如員工識別碼或序號。 Access 使用主索引鍵讓來自多個資料表的資料快速產生關聯,並為您整合資料。
有時主索引鍵會包含兩個或多個欄位。 例如,儲存訂單明細項目的「訂單詳細資料」資料表可能在它的主索引鍵中使用兩個資料行:「訂單識別碼」與「產品識別碼」。 當主索引鍵採用多個資料行時,這就稱為「複合索引鍵」。
如果您在資料表中已有資訊的唯一識別碼,例如唯一識別型錄中每個產品的產品編號,則使用它,但僅限值符合主索引鍵的這些規則:
-
每一筆記錄的識別碼一定都會不同。 主索引鍵中不准許重複的值。
-
項目永遠會有一個值。 資料表中的每一筆記錄都必須有主索引鍵。 如果您使用多個資料行建立該索引鍵 (例如「零件系列」與「零件編號」),兩個值都必須一律存在。
-
主索引鍵是不會變更的值。 因為這些索引鍵被其他資料表參照,對一個資料表中的主索引鍵進行任何變更表示會變更參照的每一個地方。 經常變更會增加錯誤的風險。
如果您還沒有明顯的識別碼,請使用任意、唯一的數字做為主索引鍵。 例如,基於識別訂單的唯一目的,您可能為每一筆訂單指定一個唯一的訂單編號。
提示: 若要建立一個唯一數字做為主索引鍵,請透過「自動編號」資料類型新增資料行。 「自動編號」資料類型會自動為每一筆記錄指定一個唯一的數字值。 此類型的識別碼不包含描述其所代表之列的事實資訊。 這用來做為主索引鍵是很理想的,因為數字不會變更 — 不像包含資料列相關事實的主索引鍵 (例如電話號碼或客戶名稱)。