1. データベース設計入門 MOC
- データベース設計とは
- データベース設計の3つのレベル (フェーズ)
- 概念設計 (Conceptual Design) (ビジネス要件を抽象的なモデルに)
- 論理設計 (Logical Design) (特定のデータモデル(例:リレーショナル)にマッピング)
- 物理設計 (Physical Design) (特定のDBMS上での実装を定義)
- データベース設計のプロセス全体像
[[要求分析 → 概念設計 → 論理設計 → 物理設計 → 実装 → テスト → 運用・保守]]
- データモデリングの重要性
- 設計原則
[[データ整合性 (Data Integrity) の確保]][[データ冗長性 (Data Redundancy) の最小化 (正規化)]][[パフォーマンスとスケーラビリティの考慮]][[柔軟性と拡張性の確保]][[セキュリティの考慮]]
2. 概念設計 (Conceptual Design) MOC
- 概念設計の目的
[[ビジネス要件とデータ要件の理解と文書化]][[利害関係者 (ステークホルダー) とのコミュニケーションツール]][[データベースの全体像の把握]]
- 要求分析 (Requirements Analysis)
[[データ要件の収集 (どのようなデータを、どのように利用するか)]][[機能要件と非機能要件の洗い出し]][[ユーザーインタビューとドキュメント分析]]
- ERモデル (Entity-Relationship Model) MOC
- エンティティ (Entity) の特定 (システムが管理すべき「モノ」や「概念」)
- 属性 (Attribute) の特定 (エンティティが持つ情報)
[[単純属性 vs. 複合属性]][[単一値属性 vs. 多値属性]][[派生属性 (Derived Attribute)]]
- リレーションシップ (Relationship) の特定 (エンティティ間の関連)
[[リレーションシップの次数 (Degree)]](2項関係, 3項関係)
- 多重度
[[1対1 (One-to-One)]][[1対多 (One-to-Many)]][[多対多 (Many-to-Many)]]
- 参加の制約 (Participation Constraints) (全体参加 vs. 部分参加)
- 弱エンティティ (Weak Entity)
- ISA関係 (サブクラスとスーパークラス)
[[継承の表現]]
- ER図 (ER Diagram - ERD) の作成 MOC
[[ER図の表記法 (チェン記法, IE記法/カラスの足記法, UMLクラス図)]][[良いER図を作成するためのヒント]][[ER図作成ツール (draw.io, Lucidchart, ERDPlusなど)]]
- 概念設計の成果物 (ER図、データディクショナリ)
3. 論理設計 (Logical Design) MOC
- 論理設計の目的
[[概念モデルを特定のデータモデル (例: リレーショナルモデル) に変換]][[DBMSに依存しないスキーマの設計]]
- リレーショナルデータベースの論理設計
- ERモデルからリレーショナルモデルへのマッピング
[[エンティティ → テーブル]][[属性 → 列 (カラム)]][[1対多リレーションシップ → 外部キー]][[1対1リレーションシップの扱い]][[多対多リレーションシップ → 関連テーブル (中間テーブル)]][[弱エンティティのマッピング]][[汎化/特殊化のマッピング戦略]]
- 正規化 (Normalization) MOC (再掲・設計プロセスとして)
[[正規化の目的と更新時異常 (挿入・更新・削除異常)]][[関数従属性の分析]]- 第一正規形 (1NF) への変換 (繰り返しグループの排除)
- 第二正規形 (2NF) への変換 (部分関数従属の排除)
- 第三正規形 (3NF) への変換 (推移的関数従属の排除)
- ボイス・コッド正規形 (BCNF) への変換
- 正規化の利点とパフォーマンスのトレードオフ
- 非正規化 (Denormalization) の検討
[[非正規化を適用するケース (パフォーマンス要件)]][[非正規化の手法 (冗長な列の追加、テーブルのマージなど)]]
- ERモデルからリレーショナルモデルへのマッピング
- NoSQLデータベースの論理設計 (データモデリング)
- クエリ駆動モデリング (Query-Driven Modeling) (再掲)
[[ドキュメントデータベースのモデリング (埋め込み vs. 参照)]][[キーバリューストアのキー設計]][[カラム指向データベースのパーティションキー/クラスタリングキー設計]][[グラフデータベースのノードとエッジの設計]]
- 論理設計の成果物 (テーブル定義書、リレーションシップ定義、正規化されたスキーマ)
4. 物理設計 (Physical Design) MOC
- 物理設計の目的
[[論理スキーマを特定のRDBMS/NoSQLシステム上に実装]][[パフォーマンス、ストレージ効率、セキュリティなどを考慮した物理的構成の決定]]
- データ型 (Data Types) の選択 MOC
[[特定のDBMSが提供するデータ型の選択]](例:INTvs.BIGINT,VARCHARvs.TEXT)[[ストレージサイズとパフォーマンスへの影響]][[固定長 vs. 可変長]][[適切な日付・時刻型の選択]]
- インデックス設計 (Index Design) MOC
[[インデックスの役割と仕組み (B-Treeなど)]](再掲)- どの列にインデックスを作成すべきか
[[主キーとユニークキー]][[外部キー]][[WHERE句で頻繁に使用される列]][[JOIN句で使用される列]][[ORDER BY句で使用される列]]
- 複合インデックス (Composite Index) の設計
[[列の順序の重要性]]
- カバリングインデックス (Covering Index)
- インデックスの貼りすぎによる弊害 (更新パフォーマンスの低下)
[[インデックスのメンテナンス (REINDEXなど)]]
- パーティショニング (Partitioning) MOC
[[パーティショニングの目的 (大規模テーブルの管理性・パフォーマンス向上)]][[水平パーティショニング (Horizontal Partitioning) / シャーディング]][[レンジパーティショニング]][[リストパーティショニング]][[ハッシュパーティショニング]]
[[垂直パーティショニング (Vertical Partitioning)]]
- ビュー (Views) の物理的設計
[[マテリアライズドビュー (Materialized Views)]]
- ファイル編成とストレージパラメータ
[[テーブルスペースの設計]][[物理的なデータ配置の考慮]]
- 制約 (Constraints) の実装
[[データベースレベルでの制約とアプリケーションレベルでの制約]]
- 物理設計の成果物 (DDLスクリプト, ストレージ設定, インデックス定義)
5. 特定の要件のためのデータベース設計 MOC
- パフォーマンスのための設計 MOC
[[クエリパフォーマンスの最適化を意識した設計]][[非正規化の戦略的利用]][[キャッシュ戦略とデータベース設計]]
- スケーラビリティのための設計 MOC
[[水平スケール vs. 垂直スケール]][[シャーディング戦略の設計]][[ステートレスアプリケーションとの親和性]]
- 高可用性と耐障害性のための設計 MOC
[[レプリケーション (Replication) の設計]][[フェイルオーバークラスタの設計]][[バックアップとリカバリ戦略]]
- セキュリティのための設計 MOC
- データベースセキュリティの原則
[[ユーザー、ロール、権限の設計 (DCL)]][[ビューによるアクセス制御]][[データの暗号化 (転送中、保存時)]][[監査ログの設計]]
- データウェアハウス (DWH) の設計 MOC (再掲・設計プロセスとして)
[[スタースキーマとスノーフレークスキーマの設計]][[ETL/ELTプロセスを考慮した設計]][[SCD (Slowly Changing Dimensions) の設計]]
- 時系列データの設計 MOC
- 地理空間データの設計 MOC
6. データベースのライフサイクルとベストプラクティス MOC
- データベースのリファクタリング (Database Refactoring) MOC
[[リファクタリングの必要性と課題]][[代表的なリファクタリングパターン]]
- スキーマ変更とデータマイグレーション (Schema Evolution and Data Migration) MOC
[[マイグレーションの戦略 (ビッグバン vs. 段階的)]][[マイグレーションツール (Flyway, Liquibase, Alembicなど)]][[ゼロダウンタイムマイグレーション]]
- データベースのドキュメンテーション
[[データディクショナリ (Data Dictionary) / データ定義書]][[ER図の維持管理]][[ドキュメント自動生成ツール]]
- バージョン管理 (Version Control) for Databases
[[スキーマ定義とマイグレーションスクリプトのGit管理]]
- データベース設計のアンチパターン MOC
[[不適切な主キーの選択 (例: 変更されうる自然キー)]][[インデックスの乱用または不足]][[過度な正規化 / 不適切な非正規化]][[データ型を大きく取りすぎる (VARCHAR(255)の乱用など)]][[EAV (Entity-Attribute-Value) パターンの誤用]][[一つのテーブルに全てを詰め込む (God Table)]][[ロジックをデータベースに寄せすぎる (複雑なストアドプロシージャ)]]
- (オプション) ORM (Object-Relational Mapper) 利用時の設計考慮事項
[[N+1問題と対策]][[ORMが生成するSQLの意識]]
7. データベース設計ツール MOC
- モデリング/ER図作成ツール
[[draw.io (diagrams.net)]][[Lucidchart]][[ERDPlus]][[Figma (FigJam)]][[Miro]][[ER/Studio]][[ERwin Data Modeler]][[MySQL Workbench]][[pgModeler]]
- スキーマ管理/マイグレーションツール
[[Flyway]][[Liquibase]][[Alembic]][[dbt]](データ変換層でのモデリング)
- データベースクライアント/管理ツール
[[DBeaver]][[DataGrip]][[pgAdmin (PostgreSQL)]][[MySQL Workbench]](再掲)