数据库
2025/6/25大约 5 分钟
数据库架构概览
目前BUCSSA技术部使用单一MySQL数据库服务器,部署在Portal的服务器上。该服务器承载了所有核心业务数据,包括用户管理、申请流程、财务记录等重要信息。
数据库环境分为:
- 生产环境 (portal_prod):承载线上业务数据
- 开发环境 (portal_development):用于开发测试
环境配置
生产环境 (Production)
- 服务器地址: 74.48.140.114
- 端口: 3306
- 数据库名: portal_prod
- 用户名: production
开发环境 (Development)
- 服务器地址: 74.48.140.114
- 端口: 3306
- 数据库名: portal_development
- 用户名: development
联系信息
如需生产环境数据库相关支持,请联系技术部部长或副部长。
数据库结构图
以下是Portal生产数据库的完整ER图,展示了所有表及其关系:
数据库表分类说明
🔐 用户认证模块
- users: 用户基础信息和权限
- session_storage: 会话存储
- verif_storage: 验证码临时存储
📝 申请招新模块
- application: 申请表信息
- interview: 面试场次安排
- [部门]_interview: 各部门具体面试时间槽
🎉 活动管理模块
- activity_info: 活动基础信息
- activity: 活动报名记录
💰 财务管理模块
- reimbursement: 报销申请
- reimbursement_details: 报销明细
- transaction_history: 交易记录
🗳️ 投票系统
- poll: 投票记录
🎲 抽奖系统
- cssa_choujiang: 抽奖参与者
- cssa_choujiang_department: 部门统计
- choujiang_general: 抽奖状态
- choujiang_question: 抽奖问题
- choujiang_user: 用户答题记录
表关系说明
- application 通过
interview_id关联到 interview 表 - interview 作为主表,关联到各部门的面试时间槽表
- reimbursement 通过
event_id关联到 reimbursement_details - 抽奖系统中的
_fake表用于测试环境
数据库迁移考虑
🐘 PostgreSQL 迁移规划
考虑到现代化应用开发的需求和技术生态的发展,建议在条件允许的情况下考虑将数据库从MySQL迁移至PostgreSQL。
迁移优势分析
🚀 技术优势
- JSON支持更完善: PostgreSQL对JSON/JSONB数据类型的原生支持更强大
- 扩展性更好: 丰富的扩展生态(PostGIS、pg_cron等)
- 并发性能: 更优秀的MVCC并发控制机制
- 数据类型: 支持数组、范围类型等高级数据类型
☁️ 云服务生态
- Vercel集成: 与Neon、Supabase等现代PostgreSQL服务无缝集成
- 成本效益: 托管PostgreSQL服务通常更具成本优势
- 自动备份: 云服务提供自动备份和高可用性
🛠️ 开发体验
- 现代ORM支持: Prisma、Drizzle等现代ORM对PostgreSQL支持更好
- 类型安全: 更好的TypeScript集成体验
迁移策略建议
📋 分阶段迁移
🎯 具体步骤
- 新项目先行: 如Presidential Election已使用Neon PostgreSQL
- 建立测试环境: 搭建PostgreSQL开发/测试环境
- 数据结构映射: 制定MySQL到PostgreSQL的schema迁移方案
- 应用层适配: 修改ORM配置和SQL查询
- 数据迁移: 使用pgloader或custom脚本进行数据迁移
- 并行运行: 短期内保持两套数据库同步
- 逐步切换: 分模块逐步切换到PostgreSQL
现有项目适配建议
🔄 Application Portal
- 可考虑使用SQLAlchemy的PostgreSQL适配器
- 大部分业务逻辑无需修改
- 需要调整部分MySQL特有的SQL语句
📈 数据迁移工具推荐
- pgloader: 自动化MySQL到PostgreSQL迁移
- AWS DMS: 如果使用AWS环境
- Custom Script: 针对特殊业务逻辑的定制迁移脚本
迁移注意事项
- 数据一致性: 确保迁移过程中数据完整性
- 业务连续性: 制定回滚方案,minimise停机时间
- 性能测试: 迁移后进行充分的性能测试
- 团队培训: 确保团队成员熟悉PostgreSQL特性
推荐时机
- 新项目: 立即使用PostgreSQL
- 现有项目: 在重大版本升级或架构重构时考虑迁移
- 云原生化: 配合serverless架构改造一起进行
