第7章:数据库设计与GORM实战
flowchart LR
H[Handler] --> S[Service]
S --> R[Repository]
R --> G[GORM]
G --> TX{事务边界}
TX --> DB[(数据库)]
TX --> EVT[钩子Hooks]
EVT --> LOG[审计/日志]classDiagram
class User {
+ID: int
+Username: string
+Email: string
+Role: int
+CreatedTime: int64
}
class Token {
+ID: int
+UserID: int
+Key: string
+RemainQuota: int64
}
class Channel {
+ID: int
+Name: string
+Weight: uint
}
User "1" -- "*" Token: 拥有
Channel .. User: 按角色/权限可见7.2 数据库连接与多库配置
7.4 模型定义与标签
7.6 数据库迁移与钩子
7.1 数据库设计基础
7.1.1 关系型数据库设计原则
1. 范式化设计
2. ACID特性保证
3. 数据完整性约束
4. 索引设计策略
7.1.2 New API项目数据库架构
核心表结构设计
数据库架构层次
表间关系设计原则
7.2 数据库连接与多库配置
7.2.1 连接池管理与配置
连接池核心参数
7.2.2 多数据库配置与管理
多库配置实现
7.2.3 故障转移与健康检查
健康检查实现
7.3 GORM框架入门
7.3.1 GORM简介与特性
核心特性详解
安装和依赖管理
7.3.2 GORM初始化与配置
GORM配置选项详解
7.3.3 基础CRUD操作
创建记录(Create)
查询记录(Read)
更新记录(Update)
删除记录(Delete)
7.3.4 数据库连接与配置
连接配置
7.4 模型定义与标签
7.4.1 基础模型设计
模型设计原则
基础模型定义
7.4.2 GORM标签系统
标签分类与作用域
完整标签示例
高级标签配置示例
7.4.3 模型关系映射
关系类型与映射策略
关系映射实现示例
关系查询时序图
7.4.4 标签参考手册
完整标签分类表
分类
标签
说明
示例
适用场景
7.5 New API项目模型实现
7.5.1 项目模型架构设计
模型层次架构
核心模型关系图
7.5.2 用户模型实现
7.5.3 令牌模型实现
令牌生命周期管理
7.5.4 渠道模型实现
渠道管理架构
渠道模型定义
7.5.5 日志模型实现
日志系统架构
日志生命周期
日志模型定义
7.5.6 模型关系总结
完整的模型关系图
关系类型说明
关系类型
说明
示例
外键约束
7.5.7 模型设计最佳实践
设计原则
命名规范
字段设计规范
索引设计策略
7.7 GORM高级特性
7.4.1 关联查询
预加载(Preload)
连接查询(Joins)
子查询
7.4.2 事务处理
手动事务
7.6 数据库迁移与钩子
7.6.1 数据库迁移策略
迁移类型与策略
自动迁移实现
版本化迁移实现
7.6.2 钩子函数系统
钩子执行时序
钩子函数实现
钩子函数最佳实践
7.6.3 迁移示例实现
具体迁移示例
7.7 GORM高级特性
7.7.1 关联查询
预加载(Preload)
连接查询(Joins)
子查询
7.7.2 事务处理
事务执行流程
手动事务管理
嵌套事务与保存点
7.7.3 自定义数据类型
JSON字段处理
加密字段类型
时间戳类型
7.7.4 高级查询技巧
动态查询构建
7.8 性能优化
7.8.1 性能优化策略概览
7.8.2 索引优化策略
索引类型与选择
7.8.3 查询优化技术
查询执行计划分析
分页优化策略
7.8.4 批量操作优化
7.8.5 连接池优化
7.8.6 缓存策略
7.9 最佳实践
7.9.1 企业级开发规范
7.9.2 模型设计最佳实践
设计原则
模型验证和约束
7.9.3 查询优化最佳实践
查询模式优化
7.9.4 事务管理最佳实践
事务使用原则
7.9.5 安全最佳实践
输入验证和SQL注入防护
敏感数据处理
权限控制和审计
7.9.6 监控和运维最佳实践
性能监控
错误处理和重试机制
健康检查和告警
备份和恢复策略
7.9.7 部署和配置最佳实践
嵌套事务
保存点(Savepoint)
7.4.3 钩子函数
完整的钩子函数示例
7.4.4 自定义数据类型
JSON字段处理
加密字段
7.6.1 数据库迁移实践
7.5.1 自动迁移
7.5.2 手动迁移
7.5.3 版本化迁移
本章小结
主要内容回顾
核心技能掌握
实践价值
练习题
基础练习
进阶练习
综合项目练习
扩展阅读
官方文档和规范
深度学习资源
技术博客和实践案例
开源项目参考
在线学习平台
监控和运维工具
最后更新于
这有帮助吗?
