Data Model Designer
概念→論理→物理の3段階でデータモデルを設計し、ER図・データ辞書・DDLを出力するSkill。
Goals
- •ユーザーの業務要件から 概念/論理/物理データモデル を段階的に設計する
- •Mermaid ER図(概念ERD・論理ERD・物理ERD)を生成する
- •データ辞書(属性定義・制約・型)を整理する
- •DDL(CREATE TABLE等)を生成する
- •各段階で チェックリストによる品質担保 を行う
Non-goals
- •実際のDB構築・マイグレーション実行
- •性能チューニングの実測・ベンチマーク
- •特定ツール(ERwin、A5:SQL等)のファイル出力
Inputs(入力の期待形式)
以下のいずれか、または組み合わせ:
- •業務要件の説明(自然言語)
- •例:「ECサイトの注文管理。顧客が商品を注文し、配送先を指定する」
- •エンティティ候補のリスト
- •例:「顧客、注文、商品、配送先」
- •既存テーブル定義/DDL(リバース用)
- •作成する段階の指定(任意)
- •「概念だけ」「論理まで」「物理まで全部」
- •DBMS指定(物理の場合)
- •例:「PostgreSQL」「MySQL 8」「SQLite」
Outputs(成果物)
概念データモデル(CDM)
- •概念ER図(Mermaid erDiagram)
- •用語集(エンティティ定義)
- •スコープ/前提メモ
論理データモデル(LDM)
- •論理ER図(属性・PK/FK・カーディナリティ付き)
- •データ辞書(属性定義・型・制約・必須/任意)
- •業務ルール一覧
物理データモデル(PDM)
- •物理ER図(テーブル・カラム・型・索引)
- •DDL一式(CREATE TABLE/INDEX/制約)
- •インデックス設計根拠
- •運用設計メモ(監査カラム、論理削除等)
Instructions(設計手順)
Phase 1: 概念データモデル
- •
エンティティ抽出
- •業務要件から主要な「もの」「概念」を洗い出す
- •名詞に注目(顧客、注文、商品…)
- •
関係の整理
- •エンティティ間の関係を「〜する」「〜を持つ」で記述
- •多重度は大まかに(1対多、多対多)
- •
用語の統一
- •同義語を潰す(ユーザー=会員=アカウント?)
- •用語集として定義を明文化
- •
概念ERD出力
- •Mermaid erDiagramで出力
- •属性は書かない(エンティティと関係のみ)
- •
検証
- •代表ユースケースでエンティティが足りているか確認
Phase 2: 論理データモデル
- •
属性の定義
- •各エンティティに属性を追加
- •属性ごとに「意味」「例」を明記
- •
キーの決定
- •主キー(PK):自然キー or サロゲートキー
- •外部キー(FK):関係をキーで表現
- •
カーディナリティ詳細化
- •1:1, 1:N, N:M を明確に
- •N:Mは中間エンティティで解決
- •
正規化
- •第3正規形を目指す
- •冗長・更新異常を排除
- •
論理ERD・データ辞書出力
Phase 3: 物理データモデル
- •
DBMS決定
- •対象DBMSを確認(PostgreSQL/MySQL/SQLite等)
- •
型マッピング
- •論理型→物理型へ変換
- •桁数、NULL、デフォルト決定
- •
テーブル/カラム命名
- •snake_case統一
- •予約語回避
- •
インデックス設計
- •想定クエリから逆算
- •WHERE/JOIN/ORDER BY条件を考慮
- •
運用カラム追加
- •created_at, updated_at
- •論理削除(deleted_at)必要なら
- •
DDL生成
- •CREATE TABLE/INDEX/制約
Quality Checklist
概念モデル
- • 業務用語で書かれている(DB用語なし)
- • エンティティの境界・スコープが明確
- • 同義語/多義語が整理されている
- • 代表ユースケースで検証済み
論理モデル
- • 全属性に定義(意味)がある
- • PK/FKが明確
- • カーディナリティが正確
- • N:Mは中間エンティティで解決
- • 正規化されている(理由なき冗長なし)
物理モデル
- • DBMS前提が明記
- • データ型・NULL・デフォルトが具体的
- • インデックスに根拠がある
- • 運用カラム(監査/論理削除等)考慮済み
- • DDLが実行可能
Examples
発動する例
- •「ECサイトのデータモデルを作って」
- •「顧客・注文・商品のER図を書いて」
- •「このシステムのテーブル設計をして」
- •「論理データモデルを作成して」
- •「PostgreSQLでDDLを生成して」
- •「データ辞書を整理して」
- •「概念ERDをMermaidで」
発動しない例
- •「SQLクエリを書いて」(クエリ作成は別タスク)
- •「DBのパフォーマンスを改善して」(チューニングは別タスク)
- •「マイグレーションを実行して」(実行は別タスク)
References
詳細な設計指針は reference.md を参照。
テンプレートは templates/ ディレクトリを参照。