在介紹完用Excel觀念入門關聯式資料庫RMDBSCRUD資料庫的基本操作 ,接著我們要來談談資料庫的設計原理 - 正規化。 簡單來說,正規化的目的是減少資料庫中的冗余資料及增進資料的一致性,提升資料儲存的效能。

目前普遍在資料庫實踐的正規化,有第一正規化(1NF)第二正規化(2NF)第三正規化(3NF),接下會逐一舉例介紹。

第一正規化(1NF)

執行第一正規化有三個核心概念:

  1. 每一筆Record(記錄)都有一個唯一的Primary Key(主鍵)值作為識別
  2. 每一個儲存格中只能有單一筆資料
  3. 不用超過一個欄位來儲存相同性質的資料

觀念一:Primary Key(主鍵)

首先來複習定義,主鍵值是資料庫表中可用來查詢到單一Record(紀錄)的唯一值,因此主鍵不能重複也不能是空值。若以訂單資料表來說,購買人、購買日期或訂單金額等欄位,都因為具備可重複性,不能做為Primary Key(主鍵)。

以下圖為例,要查詢阿明在10/20 下午5點53分的訂單,使用購買人欄位查詢阿明會出現兩筆紀錄,無法精確找到對應的紀錄,因此不能作為主鍵使用。

好在使用Xano的話,系統在創建資料庫時會自動建立id欄位作為主鍵,此後新增的每一筆紀錄都會以id欄位的值來當作主鍵值,每一筆新增的訂單記錄,系統會自動把id欄位的值累加,因此每筆紀錄的id欄位值既不重複,也具備唯一性。接下來不管是需要修改、查詢或刪除訂單紀錄,我們都可以依據id欄位值精確找到要修改的紀錄,不用擔心操作到錯誤的紀錄。 查詢阿明在10/20 下午5點53分的訂單,只要以id欄位值4為條件搜尋,就能準確找到紀錄囉。

利用Xano 系統建立的 id 欄位數字作為主鍵值相當方便的選擇,但可能不適合部分系統的使用情境,比如,當電商系統訂單編號使用id欄位,容易被第三方了解到系統訂單的數量,或被有心人猜測到他人的訂單編號。因此實務上常見利用字母+GUID或TimeStamp + GUID等方式來產生資料表的主鍵。

觀念二:一格只存一筆資料

以上圖的資料表為例,可以發現在income欄位儲存了三筆資料(100, 200, 300)並用逗號做分隔,這樣的資料會讓後續要為阿明做income 加總或計算時造成很大的麻煩。不過我們按照第一正規化的規則,將資料表改成下面的格式,就能輕鬆解決加總計算的問題。


觀念三:不用複數個欄位來儲存代表相同意義的資料

在上圖資料表中,我們使用了三個欄位(hobby1, hobby2, hobby3)儲存每個人的愛好,在這個狀況由於愛好的值有可能會出現在3個欄位其中之一,如果想要查詢有閱讀愛好的人有哪幾位,就會需要查詢9個欄位(3x3)才能得出結果。

那在我們依照第一正規化的規則改成下圖的格式後,可以算算看現在我們要查詢有閱讀愛好的人有幾位需要查詢幾欄? 答案是4個欄位!是不是開始感覺到依照第一正規化原則設計資料庫帶來的好處了呢?

以上就是資料庫的設計原理 - 第一正規化的介紹,後續還會介紹第二正規化與第三正規化,對於有興趣踏入No Code 開發App領域的朋友,設計資料庫是一定會碰觸到的環節,熟悉這個系列的內容對後續開發會很有幫助喔。

分享這篇文章