首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

數據庫設計 20 條黃金法則:從命名規範、範式權衡到安全、備份、文檔的全生命週期最佳實踐

     編輯:MySQL 綜合教學

優秀的數據庫設計不是一次畫圖,而是持續演進的工程藝術。本文彙總 20 條經驗法則,涵蓋命名、類型、約束、索引、範式、安全、備份、文檔、運維八大維度,作為設計評審核對清單。

一、命名與結構規範(1-4)

  1. 統一命名風格:表/列用 snake_case(school_course),主鍵統一 id,外鍵 {ref_table}_id。
  2. 表名用單數:student_course 而非 student_courses,語義更清晰。
  3. 禁用空格/保留字:不加引號無法建表,維護極其痛苦。
  4. 拒絕無意義前綴:tbl_、_table 僅增加噪音,現代 IDE 已能區分對象類型。

二、數據類型與約束(5-9)

  1. 密碼只存哈希:BCrypt/Argon2 + 隨機鹽,嚴禁明文/可逆加密。
  2. 主鍵用無符號整數:BIGINT UNSIGNED 容量 1844 京,性能最優,避免 UUID 亂序寫入導致頁分裂。
  3. 索引列優先整數:字符串索引佔空間大、比較慢,業務鍵映射為整數代碼。
  4. 布爾值用 BIT/TINYINT:is_active TINYINT(1) DEFAULT 1,命名以 is_ 開頭。
  5. 最小權限原則:應用帳號僅授 SELECT/INSERT/UPDATE/DELETE,DROP/ALTER 僅 DBA 帳號持有。

三、查詢與索引習慣(10-11)

  1. 拒絕 SELECT *:顯式列出列名,利用覆蓋索引,減少傳輸與解析開銷。
  2. 復雜業務用 ORM:Hibernate/MyBatis/JPA 降低手寫 SQL 錯誤,性能問題通過 @QueryHint、二級緩存、批量操作優化。

四、物理架構與高可用(12-13)

  1. 冷熱分離:低頻大字段(BLOB/TEXT/JSON/歷史日誌)拆至獨立表/庫/存儲,熱表保持瘦身。
  2. 核心庫多副本:主從/主主/集群(Galera/InnoDB Cluster),異地備份 RPO ≤ 5 分鐘,RTO ≤ 30 分鐘。

五、完整性與文檔(14-15)

  1. 約束下沉 DB 層:FOREIGN KEY、NOT NULL、CHECK、UNIQUE 由數據庫強制,應用層只做友好提示。
  2. 文檔即代碼:ER 圖、表結構字典、觸發器/存儲過程邏輯、遷腳本全部納入 Git,隨版本發布。

六、範式與性能權衡(16-17)

  1. 適度正規化:3NF 消除冗余,但高頻 JOIN 超過 3-4 表時,適度反範式化(冗余列/物化視圖/寬表)換查詢速度。
  2. 大表必建索引:配合 pt-index-usage、sys.schema_unused_indexes 定期清理無效索引。

七、部署與運維隔離(18-19)

  1. DB 與 Web 分機房/分實例:隔離 CPU/內存/網絡故障域,安全組僅放行應用服務器 IP。
  2. 大字段拆表:IMAGE/BLOB 獨立表,主表僅存引用 ID/URL,避免緩衝池污染。

八、投資前期設計(20)

  1. 多花時間設計,少花十倍時間重構:上線前評審、壓測、滾動變更演練,每省 1 小時設計,上線後要花 10 小時修補。

附:設計評審 Checklist(可直接複製到 PR 模板)

[ ] 命名規範 snake_case / 單數表名 / 無前綴
[ ] 主鍵 BIGINT UNSIGNED AUTO_INCREMENT
[ ] 密碼哈希存儲 / 敏感字段加密
[ ] 所有業務鍵建唯一索引 / 外鍵約束
[ ] 無 SELECT * / 無隱式類型轉換
[ ] 核心表冷熱分離 / 大字段拆表
[ ] 讀寫分離 / 多副本 / 異地備份驗證
[ ] 文檔入庫:ER圖、字典、遷腳本、變更記錄
[ ] 索引覆蓋率 > 90% / 無未用索引
[ ] 慢查詢預案:長查詢改寫 / 物化視圖 / 緩存

將 20 條法則內化為團隊文化,數據庫將從「故障源頭」轉型為「業務加速器」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved