数据库设计规范
表设计规范
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 |
| json | JSON数据 | 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 |
| json | JSON数据 | 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%