# ER図

## 概要

本ドキュメントは、dbatools Maintenance Solutionで使用されるデータベーステーブルのエンティティ関連図（ER図）を記述します。

## ER図（Mermaid形式）

```mermaid
erDiagram
    CommandLog {
        int ID PK "主キー（自動採番）"
        sysname DatabaseName "対象データベース名"
        sysname SchemaName "対象スキーマ名"
        sysname ObjectName "対象オブジェクト名"
        char_2 ObjectType "オブジェクトタイプ"
        sysname IndexName "対象インデックス名"
        tinyint IndexType "インデックスタイプ"
        sysname StatisticsName "統計情報名"
        int PartitionNumber "パーティション番号"
        xml ExtendedInfo "拡張情報"
        nvarchar_max Command "実行SQLコマンド"
        nvarchar_60 CommandType "コマンドタイプ"
        datetime2 StartTime "開始時刻"
        datetime2 EndTime "終了時刻"
        int ErrorNumber "エラー番号"
        nvarchar_max ErrorMessage "エラーメッセージ"
    }

    Queue {
        int QueueID PK "主キー（自動採番）"
        sysname SchemaName "ストアドプロシージャのスキーマ名"
        sysname ObjectName "ストアドプロシージャ名"
        nvarchar_max Parameters "実行パラメータ"
        datetime2 QueueStartTime "キュー開始時刻"
        smallint SessionID "セッションID"
        int RequestID "リクエストID"
        datetime RequestStartTime "リクエスト開始時刻"
    }

    QueueDatabase {
        int QueueID PK,FK "外部キー（Queueへの参照）"
        sysname DatabaseName PK "対象データベース名"
        int DatabaseOrder "処理順序"
        datetime2 DatabaseStartTime "処理開始時刻"
        datetime2 DatabaseEndTime "処理終了時刻"
        smallint SessionID "セッションID"
        int RequestID "リクエストID"
        datetime RequestStartTime "リクエスト開始時刻"
    }

    Queue ||--o{ QueueDatabase : "has"
```

## テーブル関連の説明

### Queue - QueueDatabase（1対多）

- **関連**: QueueテーブルとQueueDatabaseテーブルは1対多の関係
- **外部キー**: `FK_QueueDatabase_Queue`
- **説明**: 1つのキューエントリ（Queue）に対して、複数のデータベース処理エントリ（QueueDatabase）が関連付けられます。これにより、1回のメンテナンスジョブで複数のデータベースを順次処理できます。

### CommandLog（独立テーブル）

- CommandLogテーブルは他のテーブルとの外部キー関係を持たない独立したテーブルです
- すべてのメンテナンスコマンドの実行履歴を時系列で記録します
- DatabaseNameカラムにより、論理的にQueueDatabaseと関連付けることが可能です（明示的な外部キー制約なし）

## 処理フロー

```mermaid
flowchart TD
    A[メンテナンスジョブ開始] --> B[Queueにエントリ作成]
    B --> C[対象データベースごとにQueueDatabaseにエントリ作成]
    C --> D{データベース処理ループ}
    D --> E[コマンド実行]
    E --> F[CommandLogに実行結果記録]
    F --> G[QueueDatabase更新（終了時刻）]
    G --> D
    D --> H[全データベース処理完了]
    H --> I[Queue更新]
```
