# ER図

## 概要

SQL Server First Responder Kit プロジェクトのデータベース構造をmermaid形式で表現したER図です。

本プロジェクトは診断ツールキットという性質上、テーブル間のリレーションシップは存在せず、独立したテーブル構造となっています。

## 永続化テーブル

```mermaid
erDiagram
    SqlServerVersions {
        tinyint MajorVersionNumber PK "メジャーバージョン番号"
        smallint MinorVersionNumber PK "マイナーバージョン番号"
        date ReleaseDate PK "リリース日"
        varchar Branch "更新レベル (RTM/CU/SP/GDR)"
        varchar Url "KB記事URL"
        date MainstreamSupportEndDate "メインストリームサポート終了日"
        date ExtendedSupportEndDate "拡張サポート終了日"
        varchar MajorVersionName "メジャーバージョン名"
        varchar MinorVersionName "マイナーバージョン名"
    }
```

## 動的出力テーブル（sp_BlitzLock）

以下はsp_BlitzLockが出力先を指定された場合に動的に作成するテーブルです。

```mermaid
erDiagram
    BlitzLock_Output {
        nvarchar ServerName "サーバー名"
        nvarchar deadlock_type "デッドロックタイプ"
        datetime event_date "イベント発生日時"
        nvarchar database_name "データベース名"
        smallint spid "セッションID"
        nvarchar deadlock_group "デッドロックグループ"
        xml query "クエリ内容"
        xml object_names "オブジェクト名"
        nvarchar isolation_level "分離レベル"
        nvarchar owner_mode "所有者モード"
        nvarchar waiter_mode "待機者モード"
        nvarchar lock_mode "ロックモード"
        bigint transaction_count "トランザクション数"
        nvarchar login_name "ログイン名"
        nvarchar host_name "ホスト名"
        nvarchar client_app "クライアントアプリ"
        bigint wait_time "待機時間"
        nvarchar wait_resource "待機リソース"
        smallint priority "優先度"
        bigint log_used "使用ログ量"
        datetime last_tran_started "最後のトランザクション開始"
        datetime last_batch_started "最後のバッチ開始"
        datetime last_batch_completed "最後のバッチ完了"
        nvarchar transaction_name "トランザクション名"
        nvarchar status "ステータス"
        xml deadlock_graph "デッドロックグラフ"
    }

    BlitzLock_Findings {
        nvarchar ServerName "サーバー名"
        int check_id "チェックID"
        nvarchar database_name "データベース名"
        nvarchar object_name "オブジェクト名"
        nvarchar finding_group "検出グループ"
        nvarchar finding "検出内容"
    }
```

## 一時テーブル構造（sp_BlitzIndex）

以下はsp_BlitzIndexが内部処理で使用する主要な一時テーブル群の関係を示します。

```mermaid
erDiagram
    IndexSanity ||--o{ IndexPartitionSanity : "has partitions"
    IndexSanity ||--|| IndexSanitySize : "has size info"
    IndexSanity ||--o{ IndexColumns : "has columns"
    IndexSanity ||--o{ BlitzIndexResults : "generates results"

    IndexSanity {
        int index_sanity_id PK "インデックス健全性ID"
        smallint database_id "データベースID"
        int object_id "オブジェクトID"
        int index_id "インデックスID"
        tinyint index_type "インデックスタイプ"
        nvarchar database_name "データベース名"
        nvarchar schema_name "スキーマ名"
        nvarchar object_name "オブジェクト名"
        nvarchar index_name "インデックス名"
        nvarchar key_column_names "キーカラム名"
        nvarchar include_column_names "付加カラム名"
        nvarchar filter_definition "フィルター定義"
        bit is_unique "一意フラグ"
        bit is_primary_key "主キーフラグ"
        bit is_disabled "無効フラグ"
        bigint user_seeks "シーク回数"
        bigint user_scans "スキャン回数"
        bigint user_lookups "ルックアップ回数"
        bigint user_updates "更新回数"
    }

    IndexPartitionSanity {
        int index_partition_sanity_id PK "パーティション健全性ID"
        int index_sanity_id FK "インデックス健全性ID"
        int object_id "オブジェクトID"
        int index_id "インデックスID"
        int partition_number "パーティション番号"
        bigint row_count "行数"
        numeric reserved_MB "予約サイズ(MB)"
        nvarchar data_compression_desc "圧縮タイプ"
    }

    IndexSanitySize {
        int index_sanity_size_id PK "サイズID"
        int index_sanity_id FK "インデックス健全性ID"
        int partition_count "パーティション数"
        bigint total_rows "総行数"
        numeric total_reserved_MB "総予約サイズ(MB)"
        numeric total_reserved_LOB_MB "LOB予約サイズ(MB)"
        nvarchar data_compression_desc "圧縮タイプ"
    }

    IndexColumns {
        int database_id "データベースID"
        int object_id "オブジェクトID"
        int index_id "インデックスID"
        int key_ordinal "キー順序"
        bit is_included_column "付加カラムフラグ"
        bit is_descending_key "降順フラグ"
        nvarchar column_name "カラム名"
        nvarchar system_type_name "データ型名"
        smallint max_length "最大長"
        tinyint precision "精度"
        tinyint scale "小数点以下桁数"
        bit is_nullable "NULL許可"
        bit is_identity "IDENTITYフラグ"
    }

    BlitzIndexResults {
        int blitz_result_id PK "結果ID"
        int check_id "チェックID"
        int index_sanity_id FK "インデックス健全性ID"
        int Priority "優先度"
        nvarchar findings_group "検出グループ"
        nvarchar finding "検出内容"
        nvarchar database_name "データベース名"
        nvarchar URL "参照URL"
        nvarchar details "詳細"
        nvarchar index_definition "インデックス定義"
        nvarchar create_tsql "作成用T-SQL"
    }

    MissingIndexes {
        int database_id "データベースID"
        int object_id "オブジェクトID"
        nvarchar database_name "データベース名"
        nvarchar schema_name "スキーマ名"
        nvarchar table_name "テーブル名"
        nvarchar statement "ステートメント"
        numeric avg_total_user_cost "平均コスト"
        numeric avg_user_impact "平均影響度"
        bigint user_seeks "シーク回数"
        bigint user_scans "スキャン回数"
        nvarchar equality_columns "等価条件カラム"
        nvarchar inequality_columns "不等価条件カラム"
        nvarchar included_columns "付加カラム"
    }

    ForeignKeys {
        nvarchar foreign_key_name "外部キー名"
        int parent_object_id "親オブジェクトID"
        nvarchar parent_object_name "親オブジェクト名"
        int referenced_object_id "参照先オブジェクトID"
        nvarchar referenced_object_name "参照先オブジェクト名"
        bit is_disabled "無効フラグ"
        bit is_not_trusted "信頼されていないフラグ"
        nvarchar parent_fk_columns "親FKカラム"
        nvarchar referenced_fk_columns "参照先FKカラム"
    }
```

## システム構成概要

```mermaid
flowchart TB
    subgraph "永続化層"
        SqlServerVersions[(SqlServerVersions)]
    end

    subgraph "ストアドプロシージャ"
        sp_Blitz[sp_Blitz]
        sp_BlitzFirst[sp_BlitzFirst]
        sp_BlitzIndex[sp_BlitzIndex]
        sp_BlitzCache[sp_BlitzCache]
        sp_BlitzWho[sp_BlitzWho]
        sp_BlitzLock[sp_BlitzLock]
        sp_BlitzBackups[sp_BlitzBackups]
        sp_BlitzAnalysis[sp_BlitzAnalysis]
        sp_DatabaseRestore[sp_DatabaseRestore]
    end

    subgraph "SQL Server システムビュー"
        sys_dm_exec[sys.dm_exec_*]
        sys_dm_os[sys.dm_os_*]
        sys_dm_db[sys.dm_db_*]
        sys_objects[sys.objects]
        sys_indexes[sys.indexes]
    end

    subgraph "動的出力テーブル（オプション）"
        Output_BlitzFirst[BlitzFirst結果]
        Output_BlitzCache[BlitzCache結果]
        Output_BlitzLock[BlitzLock結果]
        Output_BlitzWho[BlitzWho結果]
    end

    SqlServerVersions --> sp_Blitz
    SqlServerVersions --> sp_BlitzFirst

    sys_dm_exec --> sp_BlitzCache
    sys_dm_exec --> sp_BlitzWho
    sys_dm_os --> sp_BlitzFirst
    sys_dm_db --> sp_BlitzIndex
    sys_objects --> sp_BlitzIndex
    sys_indexes --> sp_BlitzIndex

    sp_BlitzFirst -.-> Output_BlitzFirst
    sp_BlitzCache -.-> Output_BlitzCache
    sp_BlitzLock -.-> Output_BlitzLock
    sp_BlitzWho -.-> Output_BlitzWho

    sp_BlitzAnalysis --> Output_BlitzFirst
    sp_BlitzAnalysis --> Output_BlitzCache
```

## 備考

- 実線の関係は、一時テーブル間の論理的な関連を示しています
- 点線の関係は、オプションの出力フローを示しています
- 一時テーブル（#プレフィックス）はセッション終了時に自動削除されます
- 動的出力テーブルは、ストアドプロシージャのパラメータで出力先を指定した場合のみ作成されます
