# ADR-003: 数据库选型 > 文档编号: GYM-ADR-003 > 版本: v1.0 > 日期: 2026-03-04 > 作者: 张翔 > 状态: 已采纳 --- ## 状态 已采纳 --- ## 决策时间 2026-03-04 --- ## 决策背景 健身房管理系统需要选择合适的关系型数据库,支持响应式编程模型,满足业务需求和性能要求。 --- ## 决策内容 选择 PostgreSQL 作为主数据库,而非 MySQL、Oracle 或 SQL Server。 --- ## 决策理由 ### 1. R2DBC支持完善 | 数据库 | R2DBC支持 | 成熟度 | 社区活跃度 | |-------|----------|--------|-----------| | **PostgreSQL** | ✅ 完全支持 | ⭐⭐⭐⭐⭐ | 高 | | MySQL | ✅ 完全支持 | ⭐⭐⭐⭐ | 高 | | Oracle | ⚠️ 支持有限 | ⭐⭐ | 低 | | SQL Server | ⚠️ 支持有限 | ⭐⭐⭐ | 中 | ### 2. 金融级数据库 - ACID事务支持完善 - 数据可靠性高 - 适合金融支付场景 ### 3. JSONB支持 - 灵活存储配置数据 - 支持复杂查询 - 减少表关联 ### 4. 全文搜索 - 内置全文搜索功能 - 支持中文分词 - 减少对Elasticsearch的依赖 ### 5. 社区活跃 - 文档完善 - 问题解决快 - 生态成熟 --- ## 替代方案 ### MySQL **优势**: - 社区活跃 - 文档丰富 - 运维简单 **劣势**: - JSON支持不如PostgreSQL - 全文搜索功能较弱 - 事务隔离级别支持有限 **不选择原因**: - JSONB功能不如PostgreSQL - 全文搜索需要额外组件 ### Oracle **优势**: - 企业级特性完善 - 性能优秀 - 技术支持好 **劣势**: - 商业数据库,成本高 - R2DBC支持有限 - 学习曲线陡峭 **不选择原因**: - 成本过高 - R2DBC支持不完善 --- ## 影响范围 - 数据库设计 - SQL编写方式 - 性能优化 - 运维管理 --- ## 后果 ### 正面影响 - ✅ R2DBC支持完善,响应式编程无缝集成 - ✅ JSONB功能强大,配置管理灵活 - ✅ 全文搜索内置,减少组件依赖 - ✅ 金融级可靠性,数据安全有保障 ### 负面影响 - ⚠️ 团队需要学习PostgreSQL特性 - ⚠️ 运维工具与MySQL不同 - ⚠️ 部分ORM工具支持不如MySQL --- ## 技术栈 ### 核心组件 - **PostgreSQL**: 15.x - **R2DBC PostgreSQL**: 1.0.0.RELEASE - **Spring Data R2DBC**: 3.2.x ### 连接池 - **R2DBC Pool**: 连接池管理 - **配置**: 最小连接数10,最大连接数50 ### 监控 - **PostgreSQL Exporter**: Prometheus监控 - **pg_stat_statements**: 慢查询分析 --- ## 相关文档 - [DB-数据库设计](../技术架构/DB-数据库设计.md) - [T-ILD-基础版-技术实现详细设计](../技术架构/T-ILD-基础版-技术实现详细设计.md) - [EVAL-002-性能与可扩展性评估报告](../../03-EVALUATION/EVAL-002-性能与可扩展性评估报告.md) --- ## 参考资料 - PostgreSQL官方文档 - R2DBC PostgreSQL驱动文档 - PostgreSQL性能优化指南