2024-09-13|閱讀時間 ‧ 約 23 分鐘

JS:資料庫設計與應用(五)

    ※ Schema 設計

    ● 什麼是Schema?

    Schema 是用來描述資料庫內的表格結構、欄位格式以及表格之間的關聯。它定義了資料庫的邏輯結構,確保資料的組織和存取方式一致。

    思考點:資料以什麼「形式」保存在資料庫?

    資料在資料庫中以多種形式保存,主要包括以下幾種:

    1. 表格 (Tables):資料以行和列的形式存放,每一行代表一條記錄,每一列代表一個欄位。
    2. 檔案 (Files):資料可以以檔案的形式儲存,常見於檔案式資料儲存系統。
    3. 區塊 (Blocks):資料被切成固定大小的區塊,常見於企業級儲存系統。
    4. 物件 (Objects):資料以物件的形式儲存,每個物件都有唯一的識別碼,適合雲端儲存和網頁應用程式。

    實務上用一個簡單的小方格表來代表一個table。說明table名稱是User,包含以下欄位:

    1. id:整數型別 (int),並且是主鍵 (PRIMARY KEY)。
    2. name:可變長度字串 (varchar),最大長度為 255 字元。
    3. email:可變長度字串 (varchar),最大長度為 255 字元。

    這樣的圖示在 Schema 設計時非常有用,可以清楚地表示 table 的結構和欄位類型。這種視覺化的表示方式有助於理解和溝通資料庫設計。


    ● 為什麼不能把所有資料塞進一個欄位(column)裡面?

    1. 資料查詢不方便,效率變慢:如果所有資料都存在一個欄位裡,查詢特定資料會變得非常困難。例如,假設我們將 idname 和 email 都存在一個 data 欄位中,查詢特定 email 的使用者時,我們需要解析每一行的 data 欄位,這樣會大大降低查詢效率。
    SELECT  *FROM user WHERE
    1. 資料修改不方便:更新資料也會變得非常麻煩。假設我們需要更新某個使用者的 email,我們需要先解析出 data 欄位中的所有資料,然後再進行更新,這樣不僅繁瑣,而且容易出錯。
    UPDATE user SET data = ? WHERE ?
    1. 資料完整性和一致性:將不同類型的資料混合在一個欄位中,會使得資料的完整性和一致性難以維護。這樣的設計違反了資料庫的正規化原則,容易導致資料冗餘和異常。


    ● 總結:

    Schema 設計的好壞,影響系統效能和開發方便。

    左圖的設計比較簡單,但在開發和效能上會造成不便。右圖則利用更多的欄位來儲存資料,這樣在查詢和開發上會更方便。因此在後端開發前,應花時間設計一個完整的 Schema 是非常重要的。這樣可以確保資料庫結構合理,查詢效率高,並且在未來的開發和維護中減少問題。良好的 Schema 設計可以提高系統的可擴展性和可維護性,讓開發過程更加順利。


    ※ Normal Forms(正規式)

    ● 在Schema設計上應該遵守的規則:

    在設計 Schema 時,遵守 Normal Forms(正規式)的規則是非常重要的。這些規則是前輩們總結出來的最佳實踐,能夠幫助我們設計出高效且易於維護的資料庫結構。

    第一正規式 (1NF)

    1. 每個欄位只保存一個值:這意味著每個欄位應該是單一的,不能包含多個值或重複的資料。這樣可以確保資料的完整性和一致性。
    2. 每個欄位的值必須是不可分割的:例如,不能在一個欄位中存儲多個電話號碼或地址。這樣可以讓資料庫更容易查詢和維護。
    3. 任兩條 Row 的內容不可以完全相同:用主鍵(Primary Key)來確保每一行資料是唯一的,這樣可以避免重複資料。主鍵是一個或多個欄位的組合,用來唯一標識每一行資料。

    第二正規式 (2NF)

    1. 符合第一正規式 (1NF)。
    2. 消除部分依賴:所有在資料表中,不是主鍵(Primary Key)的一部分的欄位必須完全依賴於主鍵。如果主鍵是由多個欄位組成的複合鍵,那麼每個非鍵屬性必須依賴於整個複合鍵,而不是只依賴其中的一部分。


    第三正規式 (3NF)

    1. 符合第二正規式 (2NF)。
    2. 消除傳遞依賴欄位(Column)之間不能存在傳遞關係。這意味著非鍵屬性不能依賴於其他非鍵屬性。換句話說,所有非鍵屬性必須直接依賴於主鍵,而不是通過其他非鍵屬性間接依賴於主鍵。


    Boyce–Codd Normal Form(BCNF)

    1. 符合第三正規式 (3NF)。
    2. 消除所有候選鍵的傳遞依賴在 BCNF 中,任何候選鍵(可以作為主鍵的欄位或欄位組合)之間不能存在傳遞依賴。這意味著每個非鍵屬性必須完全依賴於候選鍵,而不是通過其他非鍵屬性間接依賴於候選鍵。


    第四正規式 (4NF)

    1. 符合BCNF。
    2. 消除多值依賴在 4NF 中,資料表中的欄位之間不能存在多值依賴。這意味著在同一行(ROW)中,不能有一對多的關係。

    左邊的圖示在同一行(ROW)中有一對多的關係,而右邊的圖示則沒有這種關係。因此,右邊的圖示符合 4NF 的要求。


    ※ 觀念澄清

    ● Normal Forms(正規式)只是幫助我們設計Schema的規則:實務上不需要知道每個Normal Forms(正規式)對應的限制有哪些,只要理解其基本原則並應用於設計中即可

    ● 解除資料冗於得同時,可能也降低了查詢效率:嚴格遵守Normal Forms(正規式)讓我們的資料庫易於管理,但可能對系統造成額外負擔 因此,在實務中,設計資料庫時需要在資料冗餘和查詢效率之間找到平衡。


    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.