數據表規范
更新時間 2025-06-17 11:00:17
最近更新時間: 2025-06-17 11:00:17
分享文章
本文為您介紹數據表規范。
首先明確規定所有邏輯業務上實現,禁用存儲過程,函數,觸發器,視圖。
統一使用InnoDB存儲引擎,系統已指定默認存儲引擎為innodb,所以創建表時無需再指定存儲引擎。InnoDB存儲引擎是事務型的存儲引擎,支持行鎖、MVCC、崩潰恢復、具有更高效的IO,更先進的緩引和寫策略。
創建表時要明確定義主鍵,推薦為int/bigint類型的字段作為主鍵,如果是自增ID則更為完美。
MySQL INNODB為索引組織表,如果沒有顯式定義主鍵,InnoDB會使用表上的唯一索引作為主鍵,如果這個索引特別長,性能會特別差;如果表上沒有唯一索引,MySQL會創建一個6個字節的整型作為隱含的主鍵,存在被寫完而不被察覺的風險,而且性能也不佳。
如果沒有顯式設置主鍵,則很多工具無法使用(如online ddl),會讓日常的維護工作變得復雜。
自增ID可以用來做分頁優化。
自增ID可以減少復制延時。
數據表設計時必須包含日期字段,createitme和lastupdatetime。
每個表的update語句,必須包含對UpdateTime的更新。
每個數據表中字段數量盡可能少。當表的字段數較多時,建議將表分成兩張表,一張作為條件查詢表,一張作為詳細內容表。
數據表記錄數盡可能少,線上單表數據建議不超過2000萬行,可以通過分庫、分表方式實現。
創建表時,所有表名、字段名都需要添加注釋,示例如下:
-- 創建名為 example_table 的表 CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, -- 主鍵ID,自增 username VARCHAR(50) NOT NULL, -- 用戶名,不能為空 email VARCHAR(100) UNIQUE, -- 郵箱,唯一約束 age INT, -- 年齡,可以為空 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 創建時間,默認當前時間 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;表字符集統一使用utf8mb4,核對規則為utf8mb4_bin,不允許其它字符編碼。也不允許在字段里邊自己定義字符集,以下為違規示例:
-- 錯誤示例:使用 utf8 字符集 CREATE TABLE example_table_wrong ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 錯誤示例:在字段級別定義字符集 CREATE TABLE example_table_wrong ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL );