跳到主要内容
版本:V1.0

数据库

目前BUCSSA技术部使用单一MySQL数据库服务器,部署在Portal的服务器上。该服务器承载了所有核心业务数据,包括用户管理、申请流程、财务记录等重要信息。

数据库架构概览

环境配置

生产环境 (Production)

  • 服务器地址 : 74.48.140.114
  • 数据库名 : portal_prod
  • 用户名 : production
  • 用途 : 承载线上业务数据

开发环境 (Development)

  • 服务器地址 : 74.48.140.114
  • 数据库名 : portal_development
  • 用户名 : development
  • 用途 : 用于开发测试

如需生产环境数据库相关支持,请联系技术部部长或副部长。

数据库结构图

以下是Portal生产数据库的完整ER图,展示了所有表及其关系:

数据库表分类说明

🔐 用户认证模块

  • users : 用户基础信息和权限
  • session_storage : 会话存储
  • verif_storage : 验证码临时存储

📝 申请招新模块

  • application : 申请表信息
  • interview : 面试场次安排
  • [部门]_interview : 各部门具体面试时间槽
  • application 通过 interview_id 关联到 interview
  • interview 作为主表,关联到各部门的面试时间槽表

🎉 活动管理模块

  • activity_info : 活动基础信息
  • activity : 活动报名记录

💰 财务管理模块

  • reimbursement : 报销申请
  • reimbursement_details : 报销明细
  • transaction_history : 交易记录
  • reimbursement 通过 event_id 关联到 reimbursement_details

🗳️ 投票系统

  • poll : 投票记录

🎲 抽奖系统

  • cssa_choujiang : 抽奖参与者
  • cssa_choujiang_department : 部门统计
  • choujiang_general : 抽奖状态
  • choujiang_question : 抽奖问题
  • choujiang_user : 用户答题记录
  • 抽奖系统中的 _fake 表用于测试环境

数据库迁移考虑

考虑到现代化应用开发的需求和技术生态的发展,建议在条件允许的情况下考虑将数据库从MySQL迁移至PostgreSQL。

🐘 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架构改造一起进行