- 子系统表新增 apps/demo-miniprogram/(MOCK 小程序标杆校对) - db/ 描述从 "DDL/迁移/种子" 更新为 "权威DDL/迁移归档/FDW配置" - db/CLAUDE.md 目录结构对齐实际(schemas/ 为主、migrations 留空、种子已合并) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
61 lines
2.2 KiB
Markdown
61 lines
2.2 KiB
Markdown
# CLAUDE.md — Database (DDL / Migrations / Seeds)
|
||
|
||
进入本目录时自动加载。
|
||
|
||
## Schema 变更规则
|
||
|
||
修改任何影响 PostgreSQL schema 的内容(迁移脚本/DDL/表定义)时,必须同步更新 `docs/database/`:
|
||
|
||
1. **变更说明**:新增/修改/删除的表、字段、约束、索引
|
||
2. **兼容性**:对 ETL、后端 API、小程序字段映射的影响
|
||
3. **回滚策略**:如何撤销(DDL 回滚 / 数据回填)
|
||
4. **验证步骤**:至少 3 条校验 SQL
|
||
|
||
## RLS 视图双 Schema 规则
|
||
|
||
新建 DWS/DWD 表的 RLS 视图必须同时在原 schema(如 `dws`)和 `app` schema 创建:
|
||
|
||
```sql
|
||
-- 1. 原 schema
|
||
CREATE VIEW dws.v_xxx AS SELECT ... WHERE site_id = current_setting('app.current_site_id')::int;
|
||
|
||
-- 2. app schema(后端通过此路径访问)
|
||
CREATE VIEW app.v_xxx AS SELECT ... WHERE site_id = current_setting('app.current_site_id')::int;
|
||
```
|
||
|
||
回滚需逆序 DROP 两个 schema 的视图。只在原 schema 创建会导致后端查询失败。
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
db/
|
||
├── etl_feiqiu/
|
||
│ ├── schemas/ # 权威 DDL — 六层完整定义(meta/ods/dwd/core/dws/app)
|
||
│ ├── migrations/ # 未来增量迁移(v1 已全部归档)
|
||
│ ├── ods/ # ODS 补充脚本
|
||
│ └── scripts/ # 测试数据库脚本
|
||
├── zqyy_app/
|
||
│ ├── schemas/ # 权威 DDL — 三层完整定义(public/auth/biz)
|
||
│ ├── migrations/ # 未来增量迁移(v1 已全部归档)
|
||
│ └── scripts/ # 测试数据库脚本
|
||
├── fdw/ # FDW 跨库只读映射(正向 + 反向 + 测试环境)
|
||
└── _archived/ # 归档(v1 迁移 39 个、旧基线)
|
||
```
|
||
|
||
v1 阶段种子数据已合并进 `schemas/` 对应 DDL 文件末尾,不再单独维护。
|
||
|
||
## DDL 刷新
|
||
|
||
修改 schema 后,重新生成完整 DDL:
|
||
|
||
```bash
|
||
PYTHONUTF8=1 python tools/db/gen_consolidated_ddl.py
|
||
```
|
||
|
||
输出到 `docs/database/ddl/`,然后复制到 `db/*/schemas/` 保持同步。
|
||
|
||
## 测试规范
|
||
|
||
- 数据库操作使用测试库(`TEST_DB_DSN` / `TEST_APP_DB_DSN`),禁止连正式库
|
||
- 迁移脚本在测试库执行后需验证表结构
|