relational-database-design について
特定の RDBMS に依存せず、リレーショナルデータベースの論理設計とレビューを支援するスキルです。テーブル、フィールド、キー、関係、整合性を扱い、物理実装は対象外です。
主な機能
- 01RDBMS に依存しない論理設計
- 02テーブルとフィールドの設計指針
- 03候補キー・主キー・外部キーの規則
- 04関係と削除規則のモデリング
- 05整合性制約・検証テーブル・ビュー
- 06アンチパターンと用語の資料
活用シーン
- 01要件からスキーマを設計
- 02既存スキーマのレビューや改修
- 03繰り返しグループや冗長データの解消
- 04スキーマに起因するデータ損失や破損の診断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill relational-database-designインストール後、Claude Code で/relational-database-designを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdgotchas.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdanti-bend-rules-only-deliberately.mdanti-flat-file-design.mdanti-rdbms-driven-design.mdanti-spreadsheet-as-database.mdfld-clear-singular-field-names.mdfld-derive-dont-store-calculated-values.mdfld-ideal-field-checklist.mdfld-keep-fields-atomic.mdfld-store-single-values-not-lists.mdintg-database-vs-application-rules.mdintg-field-specifications.mdintg-four-levels-of-data-integrity.mdintg-validation-tables-for-allowed-values.mdintg-views-for-derived-and-restricted-data.mdkey-candidate-key-elements.mdkey-foreign-key-mirrors-its-primary-key.mdkey-one-primary-key-per-table.mdkey-prefer-stable-non-sensitive-keys.mdproc-analyze-and-interview-before-designing.mdproc-design-logically-before-choosing-rdbms.mdproc-follow-the-design-sequence.mdproc-normalization-is-built-in.mdproc-start-from-mission-and-objectives.mdrel-deletion-rule-guards-orphans.mdrel-foreign-key-on-the-many-side.md詳細
リレーショナルデータベース設計
適切なリレーショナルデータベースを設計するための、論理的でRDBMSに依存しない手法です。スキーマによって求められる判断と、規律ある論理設計手法によってそれらをどのように導き出すかを、エージェントがスキーマの設計やレビューで適用できるようにまとめています。各ルールは、具体的に誤ったデフォルトの判断を正すものです。モデルがすでに正しく判断できていることに対するルールはありません。
この手法全体では、まず論理構造を作成します。つまり、特定のRDBMS製品や物理的な考慮事項、パフォーマンス上の懸念から意図的に切り離し、組織の情報に必要なテーブル、フィールド、キー、リレーションシップ、整合性ルールを定義します。忠実に実践すれば、正規化を独立したバックエンドの工程として扱うことなく、完全に正規化されたテーブルが得られます。
適用する場面
- 要件に基づいて新しいリレーショナルスキーマを設計する
- 既存のスキーマの構造的な健全性をレビューまたはリファクタリングする
- 繰り返しグループ、多値/複合フィールド、冗長データに対処する
- テーブルの候補キー、主キー、外部キーを選択する
- 1対1、1対多、多対多、自己参照のリレーションシップをモデル化する
- 削除ルール(制限、カスケード、NULL化、拒否、デフォルト値の設定)と参加制約を決める
- 制約をフィールド仕様、リレーションシップ、検証テーブル、アプリケーションのどこに置くかを決める
- データを重複、損失、破損させるスキーマを診断する
このスキルが扱うのは論理設計です。SQL方言、インデックス作成、パーティショニング、クエリのチューニング、分析/ディメンショナル(スター・スキーマ)モデリングは扱いません。これらは、論理設計が適切に完成した後に扱う物理的/実装上の考慮事項です。
ルールのカテゴリ
| # | カテゴリ | プレフィックス | 対象 |
|---|---|---|---|
| 1 | 設計プロセスと要件 | proc- | RDBMSを選ぶ前に論理設計を行う、設計の手順に従う、ミッションと分析を起点にする、正規化を組み込む |
| 2 | テーブル構造 | tbl- | 1テーブルにつき1つの対象、理想的なテーブル、参照フィールドを作らない、冗長性を最小限に抑える |
| 3 | フィールド設計 | fld- | 理想的なフィールド、単一の値、原子性のあるフィールド、計算結果を保存しない、明確な名前 |
| 4 | キー | key- | 候補キーの要素、テーブルごとに主キーを1つだけ設定する、外部キーは主キーを反映する、安定した機密性のないキー |
| 5 | リレーションシップ | rel- | 多対多には中間テーブルを使う、外部キーの配置、削除ルール、参加制約、自己参照 |
| 6 | データ整合性、ルール、ビュー | intg- | 4つの整合性レベル、フィールド仕様、データベースとアプリケーションのルール、検証テーブル、ビュー |
| 7 | アンチパターン | anti- | フラットファイル、データベースとしてのスプレッドシート、RDBMS主導の設計、ルールからの逸脱が正当化できる場合 |
| 8 | 用語 | term- | データと情報、NULL、リレーショナルデータベースの基本用語 |
クイックリファレンス
1. 設計プロセスと要件
proc-follow-the-design-sequence— 後の手順は前の手順に依存するため、手順を省略すると整合性が損なわれますproc-design-logically-before-choosing-rdbms— 特定のRDBMSを前提とせずに論理構造を設計し、その後で選択して実装しますproc-start-from-mission-and-objectives— ミッションステートメントと目標によってデータベースの範囲が定まり、対象が明らかになりますproc-analyze-and-interview-before-designing— フィールドを考案する前に、現行システムを分析し、ユーザーや管理者に聞き取りを行いますproc-normalization-is-built-in— 理想的なフィールド、テーブル、キーに関するガイドラインによって正規化されたテーブルが得られるため、正規化は独立した工程ではありません
2. テーブル構造
tbl-one-subject-per-table— 各テーブルは、1つの主題(オブジェクトまたはイベント)のみを表しますtbl-ideal-table-checklist— 適切なテーブル構造を確認する6項目のテストtbl-no-reference-fields— レポート作成の便宜のために、別のテーブルのフィールドをコピーしないでくださいtbl-minimize-redundant-data— 外部キーによる冗長性は問題ありません。それ以外はすべて最小限に抑えてください
3. フィールド設計
fld-ideal-field-checklist— 適切なフィールドかどうかを確認するテストfld-store-single-values-not-lists— 複数の値を持つフィールドは、独立したテーブルにしますfld-keep-fields-atomic— 複数の要素で構成されるフィールドを、項目ごとに分解しますfld-derive-dont-store-calculated-values— 計算値は保存フィールドではなく、ビューに含めますfld-clear-singular-field-names— 各特性には、曖昧さのない単数形の名前を1つ付けます
4. キー
key-candidate-key-elements— フィールド(またはフィールドの組み合わせ)が候補キーになるために満たすべきテストkey-one-primary-key-per-table— 各テーブルに、NULL 以外で一意かつ安定した主キーを必ず1つだけ設けますkey-foreign-key-mirrors-its-primary-key— 同じ名前、複製された仕様、参照先の主キーから取得した値を使用しますkey-prefer-stable-non-sensitive-keys— キー値はほとんど変更されず、機密データを公開しないものにします
5. リレーションシップ
rel-junction-table-for-many-to-many— 両方の外部キーをキーとする連結テーブルで、多対多を解決しますrel-foreign-key-on-the-many-side— 1対多の外部キーは、多側に配置しますrel-deletion-rule-guards-orphans— すべてのリレーションシップに削除ルールを設定し、デフォルトでは削除を制限しますrel-participation-encodes-constraints— 必須/任意と次数(最小値、最大値)で、実際の業務上の制約を表しますrel-self-referencing-relationships— テーブルが自身と関連する場合は、明確に区別できる名前の外部キーが必要です
6. データ整合性、ルール、ビュー
intg-four-levels-of-data-integrity— テーブル、フィールド、リレーションシップ、業務ルールの整合性を組み合わせますintg-field-specifications— すべてのフィールドについて、一般、物理、論理の各要素を明確にしますintg-database-vs-application-rules— 構造的なルールはスキーマで、条件付きのルールや派生ルールはアプリケーションで適用しますintg-validation-tables-for-allowed-values— 許可値をハードコードしたリストにするより、参照テーブルを使いますintg-views-for-derived-and-restricted-data— 保存フィールドを増やす代わりに、データ、集計、検証の各ビューを使います
7. アンチパターン
anti-flat-file-design— すべてを1つのテーブルに詰め込む構造と、その見分け方anti-spreadsheet-as-database— スプレッドシートのレイアウトはリレーショナルスキーマではありませんanti-rdbms-driven-design— 知っている製品に設計を左右させないことanti-bend-rules-only-deliberately— ルールを破ることが正当化できる2つの理由と、その記録方法
8. 用語
term-data-versus-information— データは保存されるものです。情報とは、提示するために意味を持たせたデータですterm-null-is-unknown-not-zero— nullは欠落値または不明値であり、ゼロや空白ではありませんterm-relational-vocabulary— キーは論理的なもので、インデックスは物理的なものです。ビューはテーブルではありません
使用方法
該当する判断が必要になったときに、リファレンスファイルを読んでください。各ルールでは、修正対象となる誤ったデフォルトを示したうえで、標準的な方法を説明します(誤った方法が実際の落とし穴となる場合に限り、誤りと正解を対比します)。
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとソースの参照 |