Skip to content

数据库设计规范

表设计规范

sql
-- ✅ 符合规范的表设计
CREATE TABLE `sys_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(100) NOT NULL COMMENT '密码',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `phone` varchar(20) DEFAULT NULL COMMENT '手机号',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 0-禁用, 1-启用',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
  `creator_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
  `updater_id` bigint(20) DEFAULT NULL COMMENT '更新人ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 
      ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `version` int(11) NOT NULL DEFAULT '1' COMMENT '版本号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  UNIQUE KEY `uk_email` (`email`),
  KEY `idx_phone` (`phone`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB 
  DEFAULT CHARSET=utf8mb4 
  COLLATE=utf8mb4_unicode_ci 
  COMMENT='用户表'
  ROW_FORMAT=DYNAMIC;

命名规范

数据类型使用场景示例
bigint主键、大整数id, user_id
int状态、类型码status, type
decimal金额、精确小数price, amount
varchar(n)变长字符串username(50), email(100)
datetime日期时间create_time, update_time
timestamp时间戳login_time
tinyint布尔值is_deleted, is_valid
jsonJSON数据extra_info

字段类型规范

数据类型字段类型示例
bigint主键、大整数id, user_id
int状态、类型码status, type
decimal金额、精确小数price, amount
varchar(n)变长字符串username(50), email(100)
datetime日期时间create_time, update_time
timestamp时间戳login_time
tinyint布尔值is_deleted, is_valid
jsonJSON数据extra_info

索引规范

sql
-- ✅ 正确的索引使用
-- 1. 查询条件字段建立索引
CREATE INDEX idx_user_status ON sys_user(status);

-- 2. 联合索引注意顺序
CREATE INDEX idx_user_type_status ON sys_user(user_type, status);

-- 3. 唯一约束使用UNIQUE KEY
ALTER TABLE sys_user ADD UNIQUE KEY uk_user_email(email);

-- ❌ 禁止的操作
-- 1. 禁止在WHERE条件中使用的字段不建索引
-- 2. 禁止在频繁更新的字段上建过多索引
-- 3. 禁止在区分度低的字段上建索引(如性别)
-- 4. 禁止索引数量超过表字段数的30%