Review and fix PRD/BP/tech design Markdown that includes PostgreSQL table DDL and API examples. Use to enforce these conventions: no auto-increment primary keys, no foreign keys, avoid join-based designs, unique constraints written with UNIQUE (not CREATE UNIQUE INDEX), detailed COMMENTs for tables/columns, and entity/aggregate-root tables include create_time and update_time.
Scanned 5/28/2026
Install via CLI
openskills install muzhicaomingwang/ai-ideas---
name: pg-doc-schema-review
description: Review and fix PRD/BP/tech design Markdown that includes PostgreSQL table DDL and API examples. Use to enforce these conventions: no auto-increment primary keys, no foreign keys, avoid join-based designs, unique constraints written with UNIQUE (not CREATE UNIQUE INDEX), detailed COMMENTs for tables/columns, and entity/aggregate-root tables include create_time and update_time.
---
# pg-doc-schema-review
Follow this workflow when reviewing or editing PRD/BP Markdown that contains database schema / SQL examples.
## Rules to enforce
### IDs / primary keys
- Prefer **domain-scoped globally unique string IDs** as primary keys (PostgreSQL `TEXT`), with prefix = entity name or abbreviation (e.g., `plan_...`, `sup_...`), unique within the domain.
- Do **not** use auto-increment / identity as the **primary key** (avoid `SERIAL`, `GENERATED ... AS IDENTITY`, `AUTO_INCREMENT`).
- If an auto-increment numeric ID is explicitly required (rare), use `BIGINT` and **do not expose it as the entity’s external identifier**; keep the external identifier as the prefixed string ID.
### Schema design
- Do **not** define foreign keys (`FOREIGN KEY`, `REFERENCES`).
- Avoid designs that require join queries for core read paths (“不要连表查询”): prefer denormalized fields, JSONB snapshots, or read-optimized tables.
### Indexing
- Add indexes for the intended query paths.
- Unique requirements should be expressed using `UNIQUE` (e.g., `email TEXT NOT NULL UNIQUE`, or `CONSTRAINT ux_xxx UNIQUE (...)`), **not** `CREATE UNIQUE INDEX`.
### Comments
- Every table must have `COMMENT ON TABLE ...`.
- Every column must have `COMMENT ON COLUMN ...`.
### Timestamps
- Entity tables / aggregate root tables must include:
- `create_time TIMESTAMPTZ NOT NULL DEFAULT NOW()`
- `update_time TIMESTAMPTZ NOT NULL DEFAULT NOW()`
- If the doc claims DB triggers, state it explicitly; otherwise, assume **application-level update of `update_time`**.
## Review checklist (what to look for)
- ID type mismatches between API examples and schema (`*_id` as string vs int).
- Use of `CREATE UNIQUE INDEX` (should be `UNIQUE`).
- Any `FOREIGN KEY` / `REFERENCES` / join-table patterns.
- Missing `create_time`/`update_time` on core tables.
- Missing `COMMENT ON TABLE` / `COMMENT ON COLUMN`.
- SQL dialect mismatch with PostgreSQL (e.g., MySQL-only syntax).
## Tooling (optional)
Run the bundled linter to quickly flag common violations:
- `python .project/ai/dev/DBA/skills/pg-doc-schema-review/scripts/lint_md_schema.py docs/path/or/file.md`
It scans Markdown ` ```sql ` blocks and reports violations and missing comment/index sections.

No comments yet. Be the first to comment!