# 公共数据库对象所有权与发布门禁

## 对象所有权

| 数据库对象 | 唯一迁移所有者 | 下游接入方式 |
|---|---|---|
| `tb_outbox_event` 及公共索引、约束 | `tech-public-foundation` | 依赖公共 Outbox Port，禁止复制 DDL |
| `tb_system_config` 及公共索引、约束 | `tech-public-foundation` | 注册业务 Key，禁止复制 DDL 或创建任意 Key |
| Audit Event、Integration Log | `tech-global-audit` | 公共基础只依赖审计 Port |
| 通知、业务任务、业务失败明细 | 对应业务 PRD | 复用公共契约，保留自己的业务表 |

## 门禁执行

迁移和放量前运行前置检查，迁移后运行后置检查。检查只读取 PostgreSQL，重复执行不会写入业务事实；输出仅包含稳定错误码、对象名和计数，不输出事件载荷或配置值。

前置检查阻断以下情况：依赖迁移版本不足或处于脏状态、已有对象定义冲突、重复事件 ID 或配置 Key、必填字段空值、非法状态/类型、未投递事件和过期租约。后置检查还要求公共表及约定字段已经存在，并执行约束、索引和读写冒烟验证。

## 发布与回滚边界

发布顺序固定为：迁移与检查、兼容 API、Relay/Worker、依赖消费者、前端。迁移异常、Outbox 持续积压或租约大量过期、配置读写不一致、访问日志脱敏回归失败、关键任务无法恢复时停止放量。

尚未产生事实的新结构可在验证后回滚。公共表已经保存 Outbox 或配置事实后，必须先停止生产者和 Relay，保留事实并向前修复；禁止通过降级删表清理。
