重點摘要#
- 資料庫是所有資料的最終保管者,資料的壽命遠超應用程式
- 從第一天起就建立堅實的資料模型至關重要
- 資料庫層的 bug 比應用層的 bug 更具災難性,資料一旦損壞就難以恢復
- 堅實的資料模型要保證今天資料的安全,同時為明天的擴展做準備
詳細內容#
資料庫是所有資料的存放地 – 無論是員工輸入的還是從客戶收集的。使用者介面、商業邏輯、應用程式邏輯甚至員工都會來來去去,但你的資料會永遠存在。因此,從第一天起建立堅實的資料模型的重要性怎麼強調都不過分。
敏捷不等於輕忽資料模型#
對敏捷技術的熱情讓許多人認為邊做邊設計是可以的。「部署要早且頻繁」、「生產環境中的一行程式碼勝過腦中的十行」– 這些說法似乎太美好了。但就資料而言,確實如此。
雖然商業規則和使用者介面確實會快速演變,但資料中的結構和關係往往不會。因此,從一開始就正確定義資料模型(結構上和分析上)至關重要。
為什麼資料模型如此重要#
- 遷移困難:將資料從一個 schema 遷移到另一個是困難的、耗時的,而且容易出錯
- 損壞不可逆:應用層的 bug 可以暫時容忍,但資料庫層的 bug 可能是災難性的。找到並修復資料層設計問題,無法恢復已經損壞的資料
- 資料是持久的:編碼在資料模型中的領域規則是物理的和持久的;應用程式邏輯的變更不會將它們沖走
堅實資料模型的特質#
一個堅實的資料模型需要同時保證今天資料的安全,並為明天的擴展做準備:
- 保證安全:強制執行參照完整性、在已知的地方建立領域約束、選擇適當的鍵來確保參照完整性和約束滿足
- 可擴展性:適當地正規化資料,讓你可以輕鬆地在資料模型上添加架構層,不走捷徑
資料庫的守門人角色#
資料庫是珍貴資料的最終守門人。應用層本質上是短暫的,不能自我監管。為了讓資料庫正確守護,資料模型必須被設計為:
- 拒絕不屬於的資料
- 防止不合理的關係
- 透過鍵、外鍵關係和領域約束來自我文件化
信任你的資料庫並賦予它攔截其他應用層 bug 的重任,它永遠不會讓你失望。將資料庫視為堡壘,在產品演進的每個階段都維護其堡壘地位。
— By Dan Chak