Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

数据库设计

首个数据库目标是 PostgreSQL 18。开发环境固定使用 postgres:18.4-alpine, 生产环境应持续安装 PostgreSQL 18 的最新补丁版本。

users

users 是首版全局登录用户表:

字段类型约束
iduuid主键,由应用生成
emailvarchar(254)去除首尾空白并转小写,全局唯一
display_namevarchar(80)去除首尾空白,长度 1–80
password_hashtext只保存密码散列,不允许空值
created_attimestamptz创建时间
updated_attimestamptz最近更新时间

首版不建立角色、权限、Tenant、Profile 扩展表或软删除字段。查询 Profile 时 必须显式选择公开字段,不能使用 SELECT * 把 password_hash 带入响应模型。

tower_sessions.session

Session Store 使用独立 schema:

字段类型用途
idtext不透明 Session ID
databyteaSession 序列化数据
expiry_datetimestamptz过期时间和清理索引

该结构与 tower-sessions SQLx Store 兼容,但表由仓库 migration 创建。应用代码 不得调用 Store 自带的 migrate()。应用每小时清理过期记录;Session 闲置 12 小时失效,并由应用层额外执行 7 天绝对期限。

时间与标识

  • 数据库存储统一使用 timestamptz 和 UTC。
  • 对外时间使用 RFC 3339。
  • 用户 ID 使用 UUID,不把自增序号暴露为公共身份。