运动记录类应用(跑步/健身/骑行/游泳/瑜伽)的最小可用数据模型,出自运动打卡小程序。适合一切”类型 + 记录”形态的打卡应用(习惯、饮食、用药皆可套用)。
模型:字典表 + 记录表分离
exercise_types(类型字典表):name / icon / color——运动类型是用户可管理的配置,不硬编码枚举;删改类型不影响历史记录。
exercise_records(记录表):
| 字段 | 设计点 |
|---|---|
| user_id | RLS 行级安全的锚点,必须建索引 |
| type 外键 | 建索引;只存引用不存类型名 |
| 时长(分钟) | 所有运动共有 |
| 卡路里 / 距离 numeric(5,2) | 可空——游泳没有距离、瑜伽没有公里数,宁空不填 0 |
| 备注 | 自由文本 |
| created_at | 排序字段,建索引 |
统计接口(/stats)基于记录表现场聚合,不建汇总表——个人量级下实时聚合足够。
要点
- 打卡类应用的真实查询只有三种:按人按时间倒序、按类型筛选、汇总统计——索引照这三种建,不多建;
- “统一 200 状态码 + body 内 code”的接口风格对小程序端更友好(见 Taro小程序跨端踩坑与规范);
- 激励层(连胜/徽章/错题本式回顾)用客户端偏好存储即可起步,不必先上数据库。
原始素材
- README
- README
相关页面
- Taro小程序跨端踩坑与规范(本应用的前端工程规范)
- Flutter离线应用构建与测试经验(另一款家庭自用工具的建模思路)