mcpField
D
database-design-patterns

database-design-patterns

github.com/nickcrewデータ・データベース6290 回インストール18 週間前に更新
リポジトリ

database-design-patterns について

リレーショナルおよびNoSQLシステムのスキーマや永続化レイヤーを設計する開発者向けのガイダンススキルです。データモデリング、クエリ性能、スケーリング、一貫性の判断をテーマ別の資料で扱います。

主な機能

  1. 01スキーマとデータモデリングの指針
  2. 02ACID、BASE、CAPの概念
  3. 03インデックスとクエリ最適化
  4. 04パーティショニング、シャーディング、レプリケーション
  5. 05キャッシュとコネクションプーリングの実践
  6. 06テーマ別のリファレンスファイル

活用シーン

  1. 01新規アプリケーションのスキーマ設計
  2. 02遅いクエリやインデックスの調査
  3. 03データベースの拡張と複製の計画
  4. 04一貫性と永続化方式の選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nickcrew/claude-cortex --skill database-design-patterns

インストール後、Claude Code で/database-design-patternsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
core-principles.md
indexing-strategies.md
partitioning-patterns.md
query-optimization.md
replication-patterns.md
schema-design-patterns.md

詳細

データベース設計パターン

リレーショナルデータベースと NoSQL データベース全般にわたる、スケーラブルなデータベーススキーマの設計、クエリパフォーマンスの最適化、堅牢なデータ永続化レイヤーの実装に関する専門的なガイダンスです。

このスキルを使用する場面

  • 新しいアプリケーションのデータベーススキーマを設計するとき
  • 遅いクエリやデータベースのパフォーマンスを最適化するとき
  • 正規化戦略と非正規化戦略のどちらを採用するか選ぶとき
  • パーティショニング、シャーディング、レプリケーション戦略を実装するとき
  • データベース技術を移行するとき(SQL から NoSQL、またはその逆)
  • 高可用性と災害復旧を考慮して設計するとき
  • キャッシュ戦略や読み取りレプリカを実装するとき
  • データベースを水平または垂直にスケーリングするとき
  • 分散システムでデータの一貫性を確保するとき

基本概念

データモデリング

ビジネスドメイン、アクセスパターン、一貫性の要件を反映したスキーマを設計します。ワークロードの特性に基づき、正規化(データの整合性)と非正規化(読み取りパフォーマンス)のバランスを取ります。

ACID と BASE
  • ACID(リレーショナル):原子性、一貫性、分離性、耐久性――強い保証
  • BASE(NoSQL):基本的に利用可能、ソフト状態、結果整合性――柔軟性
CAP 定理

分散システムでは、整合性、可用性、分断耐性の3つのうち2つを選択します。

ポリグロット永続化

ユースケースごとに適切なデータベースを使用します。トランザクションには PostgreSQL、ドキュメントには MongoDB、キャッシュには Redis、検索には Elasticsearch、時系列データには Cassandra、グラフには Neo4j を使用します。

クイックリファレンス

タスクリファレンスを読み込む
データベースの基本原則(ACID、BASE、CAP)skills/database-design-patterns/references/core-principles.md
スキーマパターン(正規化、スター・スキーマ、ドキュメント)skills/database-design-patterns/references/schema-design-patterns.md
インデックスの種類と戦略(B-tree、ハッシュ、カバリング)skills/database-design-patterns/references/indexing-strategies.md
パーティショニングとシャーディングの手法skills/database-design-patterns/references/partitioning-patterns.md
レプリケーションモード(プライマリ・レプリカ、マルチリーダー)skills/database-design-patterns/references/replication-patterns.md
クエリの最適化とキャッシュskills/database-design-patterns/references/query-optimization.md

ワークフロー

フェーズ 1:要件分析
  1. アクセスパターンを特定します(読み取り中心か書き込み中心か)
  2. 一貫性の要件を判断します(強整合性か結果整合性か)
  3. データ量と増加率を見積もります
  4. SLA 要件を定義します(レイテンシ、可用性)
フェーズ 2:スキーマ設計
  1. エンティティとリレーションシップをモデル化します
  2. ワークロードに基づいて正規化のレベルを選びます
  3. ストレージだけでなく、クエリパターンも考慮して設計します
  4. データ分散戦略(パーティショニング/シャーディング)を検討します
フェーズ 3:パフォーマンス最適化
  1. クエリ実行計画を分析します(EXPLAIN ANALYZE)
  2. 頻繁に実行されるクエリにインデックスを追加します
  3. 適切な場合はキャッシュを実装します
  4. コネクションプーリングを設定します
  5. 監視し、反復的に改善します
フェーズ 4:スケーリング戦略
  1. 読み取り負荷を分散するために読み取りレプリカを実装します
  2. 大規模なテーブル(>100M rows)ではパーティショニングを検討します
  3. 水平スケーリングに向けたシャーディング戦略を計画します
  4. レプリケーションによる高可用性を考慮して設計します

よくある間違い

過剰な正規化:結合が多すぎると読み取りが遅くなります。読み取り中心のワークロードでは非正規化します。

インデックスの不足:クエリパターンを分析し、頻繁に使われる WHERE/JOIN カラムにインデックスを追加します。

不適切なインデックスの種類:正しいカラム順序(等価条件を先に、その後に範囲条件)で複合インデックスを使用します。

レプリケーションラグの無視:読み取り後に書き込みを読むパターンを使って、結果整合性に対処します。

不適切なパーティショニングキー:データが均等に分散され、クエリパターンにも合うキーを選びます。

N+1 クエリ:ループ内でクエリを実行する代わりに、JOIN またはバッチ読み込みを使用します。

非効率なページネーション:大規模なデータセットでは OFFSET ではなく、キーセットページネーションを使用します。

コネクションの枯渇:ワークロードに合ったサイズのコネクションプーリングを実装します。

ベストプラクティス

  1. アクセスパターンに合わせてモデル化する - データのクエリ方法に合わせてスキーマを設計します
  2. 戦略的にインデックスを作成する - 頻繁にクエリされる列にはインデックスを作成し、過剰なインデックス作成は避けます
  3. 大きなテーブルをパーティション分割する - 1 億行を超えるテーブルや時系列データに使用します
  4. 読み取り用にレプリケーションする - 読み取りのスケーリングにはプライマリ・レプリカ構成を、地理的な分散にはマルチリーダー構成を使用します
  5. クエリを最適化する - 実行計画を分析し、N+1を避け、適切なページネーションを使用します
  6. 頻繁にアクセスされるデータをキャッシュする - 適切なTTLを設定したアプリケーションレベルのキャッシュを使用します
  7. 接続をプールする - ワークロードに基づいてコネクションプールのサイズを決定します
  8. 継続的に監視する - クエリのパフォーマンス、インデックスの使用状況、レプリケーションの遅延を追跡します
  9. 成長を見越して計画する - 現在の負荷の3倍に対応できるように設計します
  10. 整合性を慎重に選択する - ビジネス要件に適した整合性レベルを選びます

リソース

書籍:

  • "Designing Data-Intensive Applications"(Kleppmann)
  • "High Performance MySQL"(Schwartz)

サイト:

  • use-the-index-luke.com
  • PostgreSQL のドキュメント
  • MongoDB のドキュメント

ツール:

  • EXPLAIN ANALYZE
  • pg_stat_statements
  • Percona Toolkit
  • pt-query-digest

コメント