数据表规范
更新时间 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 );