文章大綱
- 資料庫設計是什麼
- 常見的資料庫設計方法
- 設計資料庫時要注意的細節
- 常見的資料庫設計方法
何謂資料庫設計?(Database Design)
它是一系列可以幫助你建立並且維護商業資訊的方法,讓你建造出一個有邏輯且好維護的資料庫系統。
好的資料庫設計旨在達成以下原則:
- 避免儲存多餘的資料
多餘或是不會用到的資訊就不要放到資料庫中,避免浪費空間或是增加資料出錯的機會。
2. 保持資料正確性
資料庫設計要注意的細節:
為了達成資料查詢的效能,資料庫的設計與優化非常重要,有些問題在資料庫規模小的時候可能沒有太大感受,不過一旦規模變大,效能差別會非常明顯,影響使用者體驗。下面列出常見的四個細節
- 能夠用數字型別的欄位就不要用字串型別
資料庫在處理字串比對的速度會比數字的判別來得慢,且字串所需要的儲存空間會大於數字,因此如果能使用數字就盡量使用數字型別
2. 避免將多種資訊儲存在同一個欄位
比方以地址來說就包含多種資訊:
- 街道名稱
- 城市
- 國家
- 巷弄
假設今天要進行使用者分析,想找尋位於「台中市」的所有使用者時,你必須要用LIKE或是部分字串比對的方式去查找,而這種尋找方式會耗費大量效能。
相對來說,如果把地址的資訊分散儲存,查詢上會更容易且未來在更新也更方便。
3. 索引(index)使用方式錯誤
索引就像是在一本書裡面放分類標籤一樣,可以讓你在查找時更加快速。在資料庫中,索引是一種資料結構,正確使用會加快查資料的速度
完全不用索引:資料量小的時候可能不會察覺速度差異,但隨著資料慢慢增長,會發現查找的速度也會跟著變慢,就像是一本字典裡沒有目錄一樣,查找需要每一頁都看過,耗費大量時間。
使用過多索引:使用索引可以有效加快讀取速度,但是反而會拖慢增刪改資料的速度,因為在修改資料時,索引也需要一併更新。
4. 命名方式不一致
資料庫設計一定會碰到命名,像是Table, Column等,不論採取什麼命名原則,很重要的一點就是要「一致」,比方大小寫、單複數、分隔符號、縮寫等。使用通用且一致的方式命名才能讓團隊容易理解使用,未來在維護上也更容易。
常見的資料庫設計方法:
- 正規化 (Normalization)
正規化也被稱為標準化,主要的目的是為了要避免儲存重複或是不必要的資料,同時增進資料庫的效能,藉由正規化,可以達成資料的一致性。
正規化主要包含以下三個階段:
1NF (First Normal Form): 去除關聯表中的重複值或複合屬性
- 一個欄位只能有單一個值
- 每個欄位都是唯一,不重複
NG 範例:成績這個欄位有一個以上的值
正確應該將每個值分開紀錄:
2NF (Second Normal Form): 讓每個關聯資料表只儲存同類的資料
- 根據主鍵,將資料表拆成多張資料表
NG範例:
什麼樣的資料能稱為同類型的資料呢?最簡單的方式可以從主鍵作為區別,比方上述的表格中學號和課程編號的數值都是唯一,可以做為識別資料表的標示,因此可以做為主鍵,將上述資料表再分為學生和成績兩張表。
3NF (Third Normal Form):
如果某個欄位可以用其他欄位推斷出來,就需要再開一個表來紀錄
- 移除遞迴相依的非主鍵屬性,讓所有非主鍵屬性都只相依於該表的主鍵,而且互不相依
從上述2NF中成績的資料表中可以發現,只要知道課程編號,就能夠推算出課程名稱是什麼,因此我們可以再分出一個表
表格分好以後就完成第三階段正規化,現在我們總共有三張表,學生、成績以及課程。
2. 實體關聯圖 (Entity-Relationship Diagram)
它可以被視為資料設計的草圖,把資料所需的屬性與資料之間的關聯性畫出來,以圖像的方式呈現抽象的資料設計,不僅在繪製過程能夠幫助仔細規劃,也更讓整個團隊知道如何從資料庫獲取資料,或是即時發現設計上的問題。
實體關聯圖主要包括三個元素:
- 實體:它是指系統中可以被定義的事物或概念,比方評論、使用者等
- 屬性:我們希望從實體中得到的資訊,比方以使用者的資料表來說,我們希望得到名字、性別跟電話
- 關聯:描述不同實體之間的關聯性,比方一對多、多對一等。
線上好用的繪圖工具:
以上就是這次資料庫設計的分享內容,如果文章有任何心得反饋都歡迎留言告訴我!
參考資料