Skip to content

数据库设计文档

本数据库设计支持一个 Minecraft 模组/资源包分享平台,用户和组织可以创建项目、上传文件、管理版本等。

  • user: 用户基础信息
  • organization: 组织/团队信息
  • member: 组织成员关系
  • session: 用户会话管理
  • account: 第三方账号绑定
  • follow/friend: 社交关系
  • notification: 通知系统
  • project: 项目主表
    • 支持用户或组织作为所有者 (owner_type, owner_id)
    • 项目类型: mod, resource_pack, data_pack, world, mod_pack, plugin, server
    • 状态管理: draft, published, archived, private
    • 可见性: public, private, unlisted
  • projectVersion: 项目版本
    • 语义化版本号 (1.0.0, 1.2.3-beta)
    • 版本类型: release, beta, alpha
    • 游戏版本兼容性
    • 模组加载器支持 (forge, fabric, quilt 等)
  • projectFile: 项目文件
    • 文件类型: primary, additional, required, optional
    • 完整性校验 (SHA1, SHA256)
    • 下载统计
  • projectDependency: 项目依赖
    • 内部依赖 (平台内其他项目)
    • 外部依赖 (第三方链接)
    • 依赖类型: required, optional, incompatible, embedded
  • projectMember: 项目协作者
    • 角色: owner, maintainer, contributor, viewer
    • 细粒度权限控制
  • projectFollow: 项目关注
  • projectBookmark: 项目收藏
  • projectComment: 项目评论 (支持嵌套回复)
  • projectRating: 项目评分 (1-5星)
  • projectDownload: 详细下载记录
    • 支持匿名和注册用户
    • 地理位置统计
    • 用户代理分析
  • fileStorage: 文件存储主表
    • 支持多种存储提供商 (local, S3, Cloudflare 等)
    • 文件去重 (基于哈希)
    • 病毒扫描状态
    • 访问控制
  • fileUsage: 文件使用关联
    • 一个文件可被多个实体使用
    • 支持排序和特色标记
  • fileShare: 文件分享链接
    • 临时访问令牌
    • 下载次数限制
    • 密码保护
  • fileAccessLog: 访问日志
    • 详细的访问和下载记录
    • 性能监控
  • fileTag: 文件标签
  • fileTagRelation: 文件标签关联

使用 owner_type + owner_id 的组合来支持用户和组织都可以拥有项目:

-- 用户拥有的项目
owner_type = 'user', owner_id = user.id
-- 组织拥有的项目
owner_type = 'organization', owner_id = organization.id

将文件存储与业务逻辑分离:

  • fileStorage: 物理文件存储
  • projectFile: 项目中的文件引用
  • fileUsage: 文件使用关系

这样设计的优势:

  • 文件去重
  • 统一的访问控制
  • 跨实体文件共享
  • 便于迁移存储提供商

项目采用版本化管理:

  • 每个版本独立的文件集合
  • 支持多个游戏版本
  • 灵活的依赖管理

多层次的访问控制:

  • 项目级别: public, private, unlisted
  • 文件级别: public, private, restricted
  • 成员级别: owner, maintainer, contributor, viewer
  • 项目列表查询: (type, status, published_at)
  • 所有者查询: (owner_type, owner_id)
  • 文件访问: (file_id, created_at)
  • 用户活动: (user_id, created_at)
  • 项目 slug 全局唯一
  • 用户在项目中的角色唯一
  • 用户对项目的关注/收藏唯一

对于高频表可考虑分区:

  • projectDownload: 按时间分区
  • fileAccessLog: 按时间分区
  • notification: 按用户分区
  • 项目元数据缓存
  • 用户权限缓存
  • 统计数据缓存
  • 软删除设计
  • 历史数据归档
  • 日志数据清理
  • 外键约束
  • 文件哈希校验
  • 版本号验证
  • 基于角色的权限系统
  • 文件访问令牌
  • 审计日志
  • 敏感信息加密
  • 个人数据合规
  • 备份和恢复
/api/projects # 项目列表
/api/projects/{slug} # 项目详情
/api/projects/{slug}/versions # 项目版本列表
/api/projects/{slug}/members # 项目成员
/api/projects/{slug}/files # 项目文件
/api/organizations/{slug}/projects # 组织项目
/api/users/{username}/projects # 用户项目
  • 分页: page, limit
  • 过滤: type, game_versions, loaders
  • 排序: sort, order
  • 搜索: q, tags

这个设计提供了一个完整、可扩展的项目管理和文件存储系统,支持复杂的协作和权限管理需求。

t1