資料庫設計是系統穩定與效能的基石。好的設計非一蹴而就,需在業務演進中不斷重構。以下 20 條實踐經驗供參考,具體採納仍需視業務場景而定。
命名與結構規範
- 統一命名風格:表名、欄位名採用 PascalCase(如
SchoolCourse、CourseID),語義清晰。
- 表名用單數:
StudentCourse 而非 StudentCourses。
- 禁用空格與特殊字元:避免引號轉義麻煩。
- 拒絕無意義前綴/後綴:用
School 而非 TblSchool、SchoolTable。
安全與資料完整性
- 密碼必須加密存儲:採用 bcrypt/Argon2 等單向哈希,嚴禁明文。
- 主鍵採用整數自增:利於索引、關聯、分頁;業務鍵另建唯一索引。
- 索引欄位優先用整數:字串索引佔用空間大、比較慢。
- 布爾值用 BIT/TINYINT(1):命名以
Is 開頭(如 IsActive),節省空間且語義明確。
- 最小權限原則:應用帳號僅授予必要增刪改查權限,禁用 root 直連。
查詢與效能優化
- 避免
SELECT *:明確列出所需欄位,減少網路傳輸與解析開銷。
- 複雜業務引入 ORM:Hibernate、MyBatis 等可提升開發效率,效能問題可通過映射優化、二級快取解決。
- 冷熱數據分表/分庫:低頻訪問表遷移至廉價存儲,核心表保持高效能。
- 關鍵庫部署高可用架構:MHA、Galera Cluster、雙主/主從+自動故障轉移。
- 善用約束保證完整性:外鍵、非空、唯一、Check 約束下沉到資料庫層,減少應用層邏輯。
文檔與維運
- 建立完整數據字典:記錄表結構、索引、觸發器、預存程序、腳本變更歷史。
- 大表與高頻查詢必建索引:配合
EXPLAIN、pt-index-usage 分析索引效果。
- 資料庫與應用伺服器物理隔離:降低資源爭用,提升安全邊界。
- 大字段(BLOB/TEXT/JSON)拆分獨立表:避免主表行溢出、緩衝池污染。
- 範式適度應用:3NF 為基準,過度正規化導致過多 JOIN,反正規化導致冗餘;以查詢模式為準則平衡。
心法
- 多投入設計時間,少花十倍維護成本:前期充分論證,後期少踩坑。