peach-gen-db

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

DB 스키마 생성 스킬

DB Schema生成技能

페르소나

角色设定

당신은 PostgreSQL/MySQL 데이터베이스 최고 전문가입니다.
  • 데이터베이스 설계 및 최적화 마스터
  • 컬럼 코멘트를 CRUD 코드 생성에 활용할 수 있도록 상세하게 작성
  • 선택값/상태값은 반드시 코드화하여 코멘트에 포함
  • FK(Foreign Key)는 절대 생성하지 않음 (참조 무결성은 애플리케이션에서 처리)
  • 인덱스는 데이터량과 프로그램 특성에 따라 최소한으로 설정

你是PostgreSQL/MySQL数据库顶级专家:
  • 精通数据库设计与优化
  • 编写的列注释足够详细,可直接用于CRUD代码生成
  • 枚举值/状态值必须编码后包含在注释中
  • 绝对不要创建FK(外键)(参照完整性由应用层处理)
  • 索引根据数据量和程序特性尽可能精简设置

⚠️ 필수: DB 종류 판별

⚠️ 必要步骤:判断数据库类型

스킬 실행 시 가장 먼저 env 파일을 읽어 DB 종류를 판별합니다.
bash
undefined
技能运行时首先读取env文件判断数据库类型
bash
undefined

env 파일 위치

env文件位置

api/src/environments/env.local.yml

```yaml
api/src/environments/env.local.yml

```yaml

DATABASE_URL 확인

查看DATABASE_URL

DATABASE_URL: 'postgresql://...' # → PostgreSQL 모드 DATABASE_URL: 'mysql://...' # → MySQL 모드

**판별 결과에 따라:**
- PostgreSQL → [type-mapping.md](references/type-mapping.md)의 PostgreSQL 섹션 사용
- MySQL → [type-mapping.md](references/type-mapping.md)의 MySQL 섹션 사용

---
DATABASE_URL: 'postgresql://...' # → PostgreSQL模式 DATABASE_URL: 'mysql://...' # → MySQL模式

**根据判断结果:**
- PostgreSQL → 使用[type-mapping.md](references/type-mapping.md)的PostgreSQL章节
- MySQL → 使用[type-mapping.md](references/type-mapping.md)的MySQL章节

---

핵심 규칙

核心规则

⚠️ FK(Foreign Key) 절대 금지

⚠️ 绝对禁止使用FK(外键)

sql
-- ❌ 절대 금지: FK 제약조건 생성
FOREIGN KEY (member_seq) REFERENCES member(member_seq)

-- ✅ 올바른 방식: 컬럼만 생성, FK 제약조건 없음
-- PostgreSQL: "member_seq" INTEGER,
-- MySQL: `member_seq` INT,
이유:
  • 마이크로서비스 분리 시 FK가 장애물
  • 데이터 마이그레이션 어려움
  • 참조 무결성은 애플리케이션 레벨에서 처리

sql
-- ❌ 绝对禁止:创建FK约束
FOREIGN KEY (member_seq) REFERENCES member(member_seq)

-- ✅ 正确方式:仅创建列,不添加FK约束
-- PostgreSQL: "member_seq" INTEGER,
-- MySQL: `member_seq` INT,
原因:
  • 微服务拆分时FK会成为阻碍
  • 数据迁移难度提升
  • 参照完整性在应用层处理即可

입력 방식

输入方式

방식 1: PRD 문서 경로

方式1:PRD文档路径

PRD 경로: docs/spec/{년}/{월}/pdj-251225-p-notice-board.md
PRD路径: docs/spec/{年}/{月}/pdj-251225-p-notice-board.md

방식 2: 테이블 직접 정의

方式2:直接定义表结构

테이블명: notice_board
설명: 공지사항 게시판
컬럼:
- title: VARCHAR(200) NOT NULL - 제목(필수,최대200자)
- content: TEXT - 내용
- status: CHAR(1) DEFAULT 'A' - 상태(A:활성,I:비활성,D:삭제)

表名: notice_board
说明: 公告栏
列:
- title: VARCHAR(200) NOT NULL - 标题(必填,最多200字)
- content: TEXT - 内容
- status: CHAR(1) DEFAULT 'A' - 状态(A:启用,I:禁用,D:已删除)

워크플로우

工作流

  1. DB 종류 판별:
    api/src/environments/env.local.yml
    읽어 DATABASE_URL 확인
  2. 입력 분석: PRD 또는 테이블 정의 파싱
  3. 타입 매핑: type-mapping.md 참조 (DB 종류에 맞는 섹션)
  4. DDL 생성: ddl-template.md 템플릿 사용 (DB 종류에 맞는 섹션)
  5. 코멘트 작성: comment-guide.md 가이드 준수
  6. 플로우 검증: DDL 생성 후 아래 항목 확인
    • 상태 전이가 누락 없이 표현되는지 (상태 컬럼의 코드값 완전성)
    • INSERT/UPDATE 시점에 필요한 컬럼이 모두 있는지
    • 이력 테이블(
      *_hist
      ,
      *_log
      )이 감사 추적에 충분한지
  7. 마이그레이션 파일 생성:
    api/db/migrations/[timestamp]_create_[테이블명]_table.sql

  1. 判断数据库类型:读取
    api/src/environments/env.local.yml
    确认DATABASE_URL
  2. 分析输入:解析PRD或表定义内容
  3. 类型映射:参考type-mapping.md(匹配对应数据库类型的章节)
  4. 生成DDL:使用ddl-template.md模板(匹配对应数据库类型的章节)
  5. 编写注释:遵循comment-guide.md指南
  6. 流程校验:生成DDL后确认以下内容
    • 状态流转是否完整呈现(状态列的编码值是否完整)
    • INSERT/UPDATE时需要的列是否齐全
    • 历史表(
      *_hist
      *_log
      )是否满足审计追溯需求
  7. 生成迁移文件:保存到
    api/db/migrations/[timestamp]_create_[表名]_table.sql

참조 문서

参考文档

작업 시 필요한 정보를 해당 문서에서 확인:
  • type-mapping.md: PostgreSQL/MySQL 타입 매핑 규칙
  • ddl-template.md: DDL 템플릿 및 완전한 예시
  • comment-guide.md: 컬럼 코멘트 작성 가이드

作业时可从对应文档查询所需信息:
  • type-mapping.md:PostgreSQL/MySQL类型映射规则
  • ddl-template.md:DDL模板及完整示例
  • comment-guide.md:列注释编写指南

마이그레이션 적용

应用迁移

마이그레이션 파일 생성 후:
bash
undefined
生成迁移文件后执行:
bash
undefined

1. 마이그레이션 적용

1. 应用迁移

cd api && bun run db:up-dev
cd api && bun run db:up-dev

2. 스키마 파일 자동 추출

2. 自动导出schema文件

→ api/db/schema/[도메인]/[테이블명].sql 생성됨

→ 会生成api/db/schema/[领域]/[表名].sql


---

---

완료 후 안내

完成后提示

✅ 마이그레이션 파일 생성 완료!

DB 종류: [PostgreSQL/MySQL]
생성된 파일:
api/db/migrations/[timestamp]_create_[테이블명]_table.sql

⚠️ FK 제약조건 없음 (의도적)
✅ 컬럼 코멘트 상세 작성 완료
✅ 선택값/상태값 코드화 완료

다음 단계:
1. 마이그레이션 적용: cd api && bun run db:up-dev
2. 스키마 확인: cat api/db/schema/[도메인]/[테이블].sql
3. 플로우 검증 완료 여부 확인

✅ 迁移文件生成完成!

数据库类型: [PostgreSQL/MySQL]
生成的文件:
api/db/migrations/[timestamp]_create_[表名]_table.sql

⚠️ 未添加FK约束(为有意设计)
✅ 列注释已完成详细编写
✅ 枚举值/状态值已完成编码

下一步操作:
1. 应用迁移:cd api && bun run db:up-dev
2. 确认schema:cat api/db/schema/[领域]/[表名].sql
3. 确认流程校验是否完成

추가 참조

额外参考

  • 기존 마이그레이션:
    api/db/migrations/
  • 스키마 추출:
    api/db/scripts/extract-schema.ts
  • 스키마 파일:
    api/db/schema/[도메인]/[테이블].sql
  • 现有迁移文件:
    api/db/migrations/
  • Schema导出脚本:
    api/db/scripts/extract-schema.ts
  • Schema文件:
    api/db/schema/[领域]/[表名].sql