You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter+SQL开发学习小组任务追踪App的数据库设计问题

学习小组任务追踪App数据库设计方案

首先明确三个基础设计原则,共享访问、重名用户兼容、新成员可见全量数据的需求都可以通过这套原则覆盖:

  • 所有跨表关联一律使用主键id作为关联键,禁止使用用户名、小组名这类可重复、可修改的字段做关联,从根源上避免重名导致的数据混乱
  • 所有多对多关系(一个用户加入多个小组、一个小组包含多个用户)使用独立中间表存储,不要在主表中加固定数量的关联字段
  • 所有可复用的分类信息(比如自定义科目)单独抽成独立表,不要把分类名作为字符串冗余存在业务数据表中

推荐表结构

所有表统一使用自增整数或UUID作为主键id,所有关联字段按需添加外键约束和索引,保证数据一致性和查询效率。

1. 基础信息表

  • users(用户表,对应原表B)
    存储全平台用户的基础认证信息,字段如下:

    • id:主键,用户唯一标识
    • username:登录用户名
    • fname:用户显示名称
    • auth_info:认证凭证信息(存储密码哈希、登录态标识等,禁止存储明文密码)
  • study_groups(学习小组表,对应原表A)
    存储小组基础信息,删除原设计中固定的user1-user4字段,字段如下:

    • id:主键,小组唯一标识
    • group_name:小组显示名称
    • group_pass_hash:入组密码哈希值(禁止存储明文入组密码)

2. 关联关系中间表

  • group_members(小组成员关联表)
    解决用户和小组的多对多关联问题,是实现共享数据权限控制的核心表,字段如下:
    • id:主键
    • group_id:外键,关联study_groups.id,标记所属小组
    • user_id:外键,关联users.id,标记所属用户
    • role:成员权限标识(可选,比如区分组长/普通成员,控制编辑权限)
    • join_at:入组时间(可选,用于后续功能扩展)

    可以给group_id和user_id添加联合唯一约束,避免同一个用户重复加入同一个小组。
    权限判断逻辑非常简单:只要用户访问某小组数据时,能在这张表中查到对应的user_id+group_id记录,就允许查看/编辑小组所有共享数据;新成员入组时只需要在这张表插入一条关联记录,不需要做任何额外数据同步,即可查看小组全量历史数据。

3. 业务数据表

  • subjects(自定义科目表)
    单独抽离科目信息避免冗余存储,字段如下:

    • id:主键,科目唯一标识
    • group_id:外键,关联study_groups.id,标记科目所属小组
    • subject_name:用户自定义的科目名称
    • create_user_id:外键,关联users.id,标记科目创建人(可选)

    可以给group_id和subject_name添加联合唯一约束,避免同一个小组下创建重复同名科目。

  • tasks(任务表,基于最初方案优化)
    存储所有小组的任务数据,字段如下:

    • id:主键,任务唯一标识
    • group_id:外键,关联study_groups.id,标记任务所属小组
    • subject_id:外键,关联subjects.id,标记任务所属科目
    • task_content:任务具体内容
    • is_completed:布尔值,标记任务完成状态(任务追踪核心字段)
    • create_user_id:外键,关联users.id,标记任务创建人(可选)
    • deadline:时间类型,任务截止时间(可选)
    • create_at:时间类型,任务创建时间(可选)

方案优势

  • 无扩展性限制:小组没有固定人数上限,后续要加任务评论、任务完成记录、小组公告这类功能,只需要新增对应表关联主键即可,不需要修改现有核心表结构
  • 查询效率高:所有外键字段添加索引后,查询某小组全量科目、某科目下全量任务、某用户可访问的所有任务,都是高效的索引关联查询,数据量增长后也不会有明显性能问题
  • 维护成本低:修改科目名称、调整小组信息只需要更新对应表的单行数据,所有关联数据自动同步,不需要批量更新冗余字段
  • 数据一致性强:外键约束可以从数据库层面避免无效关联数据,不会出现引用不存在的用户、小组、科目的脏数据,重名用户不会出现权限或数据关联错误

初学者实操注意事项

  • 所有密码类字段(用户登录密码、小组入组密码)必须存储加盐哈希值,绝对不能明文存储
  • 所有数据读写的权限校验必须在后端完成,不能只靠前端控制,避免出现越权访问非本组数据的问题
  • 外键字段必须创建索引,否则数据量超过千条后关联查询速度会明显下降

内容的提问来源于stack exchange,提问作者bloombright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:06:09