数据库技术栈
核心原则
数据库设计和操作必须使用本文档指定的技术栈,确保数据一致性和性能。
技术栈清单
MySQL 8.0+
版本要求:8.0 或更高
技术特点:
- 成熟稳定的关系型数据库
- 丰富的特性(事务、索引、外键)
- 优秀的性能和社区支持
- 与 GORM 完美集成
- 企业级应用的主流选择
核心特性:
- ACID 事务支持
- InnoDB 存储引擎
- 索引优化(B-Tree、全文索引)
- JSON 数据类型支持
- 分区表支持
使用约束:
- 必须使用 InnoDB 存储引擎
- 必须为关联字段创建外键(除非有性能考虑)
- 应该为高频查询字段创建索引
- 应该使用事务保证数据一致性
- 禁止使用 MyISAM 存储引擎
参考文档:数据库设计
InnoDB 存储引擎
版本要求:MySQL 8.0 默认
技术特点:
- 支持事务(ACID)
- 支持外键约束
- 支持行级锁,并发性能好
- 自动崩溃恢复
使用约束:
- 必须使用 InnoDB(MySQL 8.0 的默认引擎)
- 禁止使用 MyISAM(不支持事务和外键)
GORM AutoMigrate(数据库迁移)
版本要求:GORM v1.31
使用场景:开发环境自动迁移
核心特性:
- 自动创建表结构
- 自动更新字段
- 保留现有数据
使用约束:
- 应该在开发环境使用 AutoMigrate
- 禁止在生产环境直接使用 AutoMigrate
- 应该为生产环境编写独立的迁移脚本
- 必须在迁移前备份数据
参考文档:数据库迁移
数据库命名规范
表名
规范:
- 必须使用小写单数名词 + 下划线分隔
- 应该使用英文单词,避免拼音
- 示例:
user,order_item,product_category
字段名
规范:
- 必须使用小写 + 下划线分隔
- 应该见名知意
- 示例:
user_id,created_at,updated_at
索引名
规范:
- 必须使用
idx_表名_字段名格式(普通索引) - 必须使用
uk_表名_字段名格式(唯一索引) - 示例:
idx_user_email,uk_user_username
外键名
规范:
- 必须使用
fk_从表_主表_字段格式 - 示例:
fk_order_user_user_id
参考文档:数据库命名规范
数据库设计规范
字段类型选择
常用字段类型:
| 数据类型 | 选用类型 | 说明 |
|---|---|---|
| 主键 | BIGINT UNSIGNED | 使用自增 ID 或雪花算法 |
| 字符串 | VARCHAR(n) | n 根据实际需求设置 |
| 文本 | TEXT | 长文本内容 |
| 布尔值 | TINYINT(1) | 0 或 1 |
| 时间 | DATETIME | 精确到秒 |
| 时间戳 | BIGINT | Unix 时间戳(毫秒) |
| 金额 | DECIMAL(10,2) | 避免浮点数精度问题 |
使用约束:
- 必须为主键字段设置
AUTO_INCREMENT(自增 ID) - 应该为所有表添加
created_at和updated_at字段 - 应该使用
deleted_at实现软删除 - 禁止使用 FLOAT 或 DOUBLE 存储金额
索引设计
原则:
- 应该为外键字段创建索引
- 应该为高频查询字段创建索引
- 应该为联合查询创建联合索引
- 避免创建过多索引(影响写入性能)
事务使用
使用约束:
- 必须使用事务处理多表操作
- 应该使用事务保证数据一致性
- 应该合理控制事务范围,避免长事务
参考文档:数据库设计
技术栈关系图
开发工具
MySQL Workbench
用途:数据库设计和管理
使用约束:
- 应该使用 MySQL Workbench 设计 ER 图
- 应该使用可视化工具管理数据库
数据库版本管理
工具:GORM AutoMigrate 或独立迁移脚本
使用约束:
- 必须版本化管理数据库结构变更
- 应该为每次迁移编写回滚脚本
性能优化
查询优化
原则:
- 应该使用 EXPLAIN 分析查询计划
- 应该避免 SELECT *,只查询需要的字段
- 应该使用 JOIN 代替子查询(性能更好)
- 避免在 WHERE 条件中使用函数(导致索引失效)
连接池配置
使用约束:
- 应该配置合理的连接池大小
- 应该设置连接超时时间
- 应该定期回收空闲连接
备份和恢复
备份策略:
- 必须定期备份生产数据库
- 应该使用增量备份(节省存储空间)
- 应该定期测试备份恢复流程