← 返回导航

数据库设计

PostgreSQL · 15.17

版本:v0.2(2026-08-16,评审后同步:PostgreSQL 方言 + 12 张表全量)
技术栈:**PostgreSQL 15.17**(PGDG),库名 `timesake`,用户 timesake
**可执行权威定义:`server/src/main/resources/db/init.sql`**(本文档为设计说明;建表/迁移一律以 init.sql 为准)
⚠️ 已知技术债(2026-08-16 数据库专项审查,用户拍板暂缓修复,见 `review/db-review-20260816.md`):
wish_* 四表存在重复外键(内联 REFERENCES 与显式 CONSTRAINT 双写)、表 owner 混乱(postgres/timesake 各半)、
invite/share/todo 部分外键缺失、updated_at 无自动维护、sms_code 只增不删。

总览(12 张表)

#说明级联
1user用户(phone 可空,openid 唯一可空)
2project时光项目(status 0=一念 1=进行中 2=已珍藏;milestones JSONB)
3project_member项目成员(uk_project_user 唯一)删项目级联
4project_record记录条目(content/image_url 至少一项)删项目级联
5invite邀请 token删项目级联
6sms_code验证码(只增不删,待清理机制)
7todo待办(筹备期,勾选留痕 done_by/done_at)删项目级联
8share只读分享(珍藏后生成)删项目级联
9wish_participant一念参与档案(seen/vote/joined 三维留痕)删项目级联
10wish_suggestion一念建议(1 时间 / 2 地点 / 3 想法,adopted 采纳标记)删项目级联
11wish_suggestion_support建议附议(uk_wss 唯一,一人一条)删建议级联
12wish_suggestion_comment建议留言(parent_id 两层:留言+回复)删建议级联

关系:project 为主根,删除项目时 member/record/invite/todo/share/wish_* 全部级联清理; user 被删(账号合并)时其参与数据由应用层 mergeUser 先转移再删除(见 skill timesake-backend-ops)。

表结构(与 init.sql 一致)

1. user 用户

2. project 时光项目

3. project_member 成员

4. project_record 记录

5. invite 邀请

6. sms_code 验证码

7. todo 待办

8. share 分享

9. wish_participant 一念参与档案(迭代 A,2026-08-14)

10. wish_suggestion 一念建议

11. wish_suggestion_support 附议

12. wish_suggestion_comment 留言(两层)

设计要点

备注