# データベース設計書

## 概要

本ドキュメントは、SQL Server First Responder Kit プロジェクトにおけるデータベース設計を記載したものです。

このプロジェクトはSQL Serverのパフォーマンス診断・分析ツールキットであり、主にストアドプロシージャで構成されています。永続化テーブルは最小限であり、大部分のデータ処理は実行時に作成される一時テーブル（#テーブル）を使用して行われます。

## テーブル一覧

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| dbo.SqlServerVersions | SQL Serverバージョン情報 | SQL Serverのメジャーバージョン・マイナーバージョンの参照マスタテーブル |

## 各テーブル定義

### 1. dbo.SqlServerVersions

SQL Serverのバージョン情報を管理する参照テーブル。各SQL Serverバージョン（SQL Server 2014〜2025）のリリース日、サポート終了日、更新プログラム情報を格納します。sp_Blitzなどのストアドプロシージャが、対象サーバーのバージョン状況を判断する際に参照します。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| MajorVersionNumber | TINYINT | NOT NULL | メジャーバージョン番号（例: 17=SQL Server 2025, 16=SQL Server 2022） |
| MinorVersionNumber | SMALLINT | NOT NULL | マイナーバージョン番号（ビルド番号） |
| Branch | VARCHAR(34) | NOT NULL | 更新レベル（RTM, CU, SP, GDR, QFEなど） |
| Url | VARCHAR(99) | NOT NULL | KB記事やリリースノートへのURL |
| ReleaseDate | DATE | NOT NULL | バージョンの公開リリース日 |
| MainstreamSupportEndDate | DATE | NOT NULL | メインストリームサポート終了日 |
| ExtendedSupportEndDate | DATE | NOT NULL | 拡張サポート終了日 |
| MajorVersionName | VARCHAR(19) | NOT NULL | メジャーバージョン名（例: "SQL Server 2022"） |
| MinorVersionName | VARCHAR(67) | NOT NULL | マイナーバージョン名（例: "Cumulative Update 23"） |

**主キー**: (MajorVersionNumber, MinorVersionNumber, ReleaseDate) - クラスタ化インデックス

## 動的に作成される出力テーブル

以下のテーブルは、ストアドプロシージャの `@OutputDatabaseName`, `@OutputSchemaName`, `@OutputTableName` パラメータを指定した際に、指定されたデータベースに動的に作成されます。

### sp_BlitzLock の出力テーブル

デッドロック分析結果を格納するために動的に作成されます。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| ServerName | NVARCHAR(256) | NULL | サーバー名 |
| deadlock_type | NVARCHAR(256) | NULL | デッドロックタイプ |
| event_date | DATETIME | NULL | イベント発生日時 |
| database_name | NVARCHAR(256) | NULL | データベース名 |
| spid | SMALLINT | NULL | セッションID |
| deadlock_group | NVARCHAR(256) | NULL | デッドロックグループ |
| query | XML | NULL | クエリ内容 |
| object_names | XML | NULL | オブジェクト名 |
| isolation_level | NVARCHAR(256) | NULL | 分離レベル |
| owner_mode | NVARCHAR(256) | NULL | 所有者モード |
| waiter_mode | NVARCHAR(256) | NULL | 待機者モード |
| lock_mode | NVARCHAR(256) | NULL | ロックモード |
| transaction_count | BIGINT | NULL | トランザクション数 |
| client_option_1 | VARCHAR(500) | NULL | クライアントオプション1 |
| client_option_2 | VARCHAR(500) | NULL | クライアントオプション2 |
| login_name | NVARCHAR(256) | NULL | ログイン名 |
| host_name | NVARCHAR(256) | NULL | ホスト名 |
| client_app | NVARCHAR(1024) | NULL | クライアントアプリケーション |
| wait_time | BIGINT | NULL | 待機時間 |
| wait_resource | NVARCHAR(MAX) | NULL | 待機リソース |
| priority | SMALLINT | NULL | 優先度 |
| log_used | BIGINT | NULL | 使用ログ量 |
| last_tran_started | DATETIME | NULL | 最後のトランザクション開始日時 |
| last_batch_started | DATETIME | NULL | 最後のバッチ開始日時 |
| last_batch_completed | DATETIME | NULL | 最後のバッチ完了日時 |
| transaction_name | NVARCHAR(256) | NULL | トランザクション名 |
| status | NVARCHAR(256) | NULL | ステータス |
| owner_waiter_type | NVARCHAR(256) | NULL | 所有者待機タイプ |
| owner_activity | NVARCHAR(256) | NULL | 所有者アクティビティ |
| owner_waiter_activity | NVARCHAR(256) | NULL | 所有者待機アクティビティ |
| owner_merging | NVARCHAR(256) | NULL | 所有者マージ状態 |
| owner_spilling | NVARCHAR(256) | NULL | 所有者スピル状態 |
| owner_waiting_to_close | NVARCHAR(256) | NULL | 所有者クローズ待機状態 |
| waiter_waiter_type | NVARCHAR(256) | NULL | 待機者待機タイプ |
| waiter_owner_activity | NVARCHAR(256) | NULL | 待機者所有者アクティビティ |
| waiter_waiter_activity | NVARCHAR(256) | NULL | 待機者待機アクティビティ |
| waiter_merging | NVARCHAR(256) | NULL | 待機者マージ状態 |
| waiter_spilling | NVARCHAR(256) | NULL | 待機者スピル状態 |
| waiter_waiting_to_close | NVARCHAR(256) | NULL | 待機者クローズ待機状態 |
| deadlock_graph | XML | NULL | デッドロックグラフ |

## 一時テーブル（プロシージャ内部使用）

以下は各ストアドプロシージャが内部処理のために使用する一時テーブルの主要なものです。これらはプロシージャ実行時に作成され、実行終了時に自動的に削除されます。

### sp_BlitzIndex で使用される一時テーブル

| テーブル名 | 説明 |
| --- | --- |
| #BlitzIndexResults | インデックス分析結果を格納 |
| #IndexSanity | インデックスの健全性情報を格納 |
| #IndexPartitionSanity | パーティションごとのインデックス情報を格納 |
| #IndexSanitySize | インデックスサイズ情報を格納 |
| #IndexColumns | インデックスカラム情報を格納 |
| #MissingIndexes | 欠落しているインデックス情報を格納 |
| #ForeignKeys | 外部キー情報を格納 |
| #IndexCreateTsql | インデックス作成用T-SQLを格納 |

### sp_BlitzLock で使用される一時テーブル

| テーブル名 | 説明 |
| --- | --- |
| #x | XML処理用の一時テーブル |
| #deadlock_data | デッドロックXMLデータを格納 |
| #t | 一時的なID格納用 |
| #deadlock_findings | デッドロック分析結果を格納 |

### sp_BlitzAnalysis で使用される一時テーブル

| テーブル名 | 説明 |
| --- | --- |
| #BlitzFirstCounts | BlitzFirst結果の集計を格納 |

### sp_DatabaseRestore で使用される一時テーブル

| テーブル名 | 説明 |
| --- | --- |
| #FileListParameters | バックアップファイルリスト情報を格納 |
| #Headers | バックアップヘッダー情報を格納 |

## 備考

### プロジェクトの特性

1. **永続化テーブルの最小化**: このプロジェクトは診断ツールキットという性質上、永続的にデータを保存するテーブルは `dbo.SqlServerVersions` のみです。

2. **動的出力テーブル**: 各ストアドプロシージャは、結果を永続化したい場合に出力先データベース・スキーマ・テーブル名を指定できるパラメータを提供しています。これらのテーブルは必要に応じて動的に作成されます。

3. **一時テーブルの活用**: 大部分のデータ処理は一時テーブル（#プレフィックス）を使用して行われ、セッション終了時に自動的にクリーンアップされます。

4. **システムビューへの依存**: 診断情報の多くは、SQL Serverのシステムビュー（sys.dm_*、sys.objects等）から直接取得されます。

### 対応SQL Serverバージョン

`dbo.SqlServerVersions` テーブルには以下のSQL Serverバージョンの情報が含まれています：
- SQL Server 2025 (メジャーバージョン 17)
- SQL Server 2022 (メジャーバージョン 16)
- SQL Server 2019 (メジャーバージョン 15)
- SQL Server 2017 (メジャーバージョン 14)
- SQL Server 2016 (メジャーバージョン 13)
- SQL Server 2014 (メジャーバージョン 12)
