在設計資料庫的過程中,我們通常會遵循一系列規則與最佳實務,例如資料正規化、資料型別設計與欄位約束。然而,在這些「規則」背後,例外情況往往是資料模型崩壞的根源。忽略這些例外可能會導致日後重構資料庫的成本大增。因此,我們在資料庫設計初期,就應該主動「挑戰規則」,深入了解業務邏輯中潛藏的變異與潛在擴展。
當有人說「某個欄位通常只會有一個值」時,這是一個設計的警訊。這個「通常」很可能會在某天失效,進而影響整個資料結構。請務必釐清:「這是業務邏輯上的絕對條件,還是只是一個暫時的觀察?」
假設你正在設計一個記錄使用者聯絡方式的系統,有人說:
「一個使用者通常只會有一個手機號碼,所以我們直接在 users 表加一個 phone_number 欄位就好了。」
萬一未來需求變更,例如:使用者可以登記多支手機,或加入家人共用帳號,每個人都有不同手機,這時原本一個欄位的設計就無法擴展,非得:
好的資料庫設計不只解決當下問題,也應預見未來可能的成長與改變。例如:
每個欄位的資料型別與限制都應在充分了解業務邏輯後設計,例如:
像「產品價格」這種欄位,若系統強制保留兩位小數,那麼就應該驗證是否有實際需求可能產生三位小數。
若無業務上的絕對需求,則不應過早設限,避免未來難以擴充。
資料庫的生命週期通常很長。設計得當的資料模型可以經年不變地支撐系統演進。要做到這一點,就必須在設計初期:
一句話總結:「設計時多問幾個為什麼,勝過事後大動幹戈的重構。」