# データベース設計書

## 概要

本ドキュメントは、Avaloniaプロジェクトにおけるデータベース設計について記載しています。

**重要な注意事項**: Avaloniaは.NET向けのクロスプラットフォームUIフレームワークであり、データベース層は含まれていません。本プロジェクトはUIフレームワークとして設計されており、永続化層（データベース）は使用者のアプリケーション側で実装されることを前提としています。

以下の内容は、サンプルアプリケーション（ControlCatalog等）で使用されているモデルクラスを、仮想的なデータベーステーブルとして設計した場合の構成を示しています。これらは実際のデータベースとして実装されているものではなく、UIデモンストレーション用のインメモリデータモデルです。

## テーブル一覧

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| Person | Person | サンプルアプリで使用される人物情報モデル |
| StateData | StateData | 米国州データを表すサンプルモデル |
| CatalogTheme | CatalogTheme | UIテーマ設定を表す列挙型 |

## 各テーブル定義

### 1. Person

人物情報を格納するサンプルテーブル。データバインディングのデモンストレーションに使用されるモデルクラスを基にしています。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| FirstName | NVARCHAR(100) | NO | 名前（姓名の名の部分） |
| LastName | NVARCHAR(100) | NO | 姓（姓名の姓の部分） |
| IsBanned | BIT | NO | 禁止フラグ（true: 禁止、false: 許可） |
| Age | INT | NO | 年齢 |

**制約:**
- FirstName: 必須項目（空文字・空白のみは不可）
- LastName: 必須項目（空文字・空白のみは不可）

**備考:**
- INotifyDataErrorInfoインターフェースを実装し、クライアント側でのバリデーションをサポート
- INotifyPropertyChangedインターフェースを実装し、プロパティ変更通知をサポート

### 2. StateData

米国の州情報を格納するサンプルテーブル。AutoCompleteBoxなどのコントロールのデモンストレーションに使用されます。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Name | NVARCHAR(100) | NO | 州の正式名称 |
| Abbreviation | NVARCHAR(10) | NO | 州の略称（例: CA, NY） |
| Capital | NVARCHAR(100) | NO | 州都名 |

**制約:**
- 全カラム必須

### 3. CatalogTheme

UIテーマ設定を表す列挙型テーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| ThemeId | INT | NO | テーマ識別子 |
| ThemeName | NVARCHAR(50) | NO | テーマ名 |

**テーマ値:**
| ThemeId | ThemeName | 説明 |
| --- | --- | --- |
| 0 | Fluent | Fluent Designテーマ |
| 1 | Simple | シンプルテーマ |

## 備考

### プロジェクト特性について

1. **UIフレームワークとしての位置づけ**: Avaloniaはデータベースを直接持たないUIフレームワークです。データの永続化はアプリケーション開発者が独自に実装します。

2. **サンプルコードの役割**: 上記のモデルクラスは、Avaloniaのデータバインディング機能やコントロールの使用方法をデモンストレーションするためのサンプルデータとして存在しています。

3. **実運用での推奨**: 実際のアプリケーション開発では、Entity Framework Core、Dapper、LiteDBなどのORMやデータベースアクセスライブラリを別途導入し、アプリケーション固有のデータベース設計を行うことが推奨されます。

### 関連ファイル

- `/samples/ControlCatalog/Models/Person.cs`
- `/samples/ControlCatalog/Models/StateData.cs`
- `/samples/ControlCatalog/Models/CatalogTheme.cs`
