# ケアプランシステム - DBセットアップガイド

## 🎯 概要

このシステムは介護保険ケアプランデータを MySQL で管理します。以下の手順で DB を構築し、データを確認できます。

## 📦 ファイル構成

```
db/
├── config.php           ← DB接続設定（常時システムで使用）
└── tools/               ← 初期設定・移行など、必要なときだけ使うツール
    ├── schema.sql       ← DBスキーマ定義(MySQL)
    ├── init.php         ← 初期化スクリプト
    ├── sample-data.sql  ← サンプルデータ
    └── README.md        ← 詳細ドキュメント

views/
└── db-viewer.php       ← データ確認用Webビューワー
```

## 🚀 クイックスタート

### ステップ 1: MySQL 起動

```bash
# Windows (MySQLコマンドラインクライアント)
mysql -u root -p
```

### ステップ 2: DB・ユーザー作成

MySQL コマンドラインで以下を実行:

```sql
-- データベース作成
CREATE DATABASE careplan_db 
  CHARACTER SET utf8mb4 
  COLLATE utf8mb4_unicode_ci;

-- ユーザー作成
CREATE USER 'careplan_user'@'localhost' IDENTIFIED BY 'careplan123';

-- 権限付与
GRANT ALL PRIVILEGES ON careplan_db.* TO 'careplan_user'@'localhost';
FLUSH PRIVILEGES;

-- 確認
SHOW DATABASES;
SHOW GRANTS FOR 'careplan_user'@'localhost';

-- MySQL を終了
EXIT;
```

### ステップ 3: スキーマ適用

ターミナルで以下を実行:

```bash
# スキーマ適用
mysql -u careplan_user -p careplan_db < db/tools/schema.sql
# パスワード: careplan123

# または PowerShell の場合
type db/tools/schema.sql | mysql -u careplan_user -p careplan_db
```

### ステップ 4: PHP 設定を環境に合わせて更新

`db/config.php` を編集:

```php
const DB_HOST = 'localhost';
const DB_PORT = 3306;
const DB_NAME = 'careplan_db';
const DB_USER = 'careplan_user';
const DB_PASS = 'careplan123';  // ← 本番では環境変数から読むこと
const DB_CHARSET = 'utf8mb4';
```

### ステップ 5: サンプルデータ挿入(オプション)

```bash
mysql -u careplan_user -p careplan_db < db/tools/sample-data.sql
# パスワード: careplan123
```

### ステップ 6: データ確認

ブラウザで以下を開く:

```
http://localhost/applecareservice/views/db-viewer.php
```

表示内容:
- **ダッシュボード**: 総レコード数、テーブル数、登録利用者数
- **テーブル一覧**: 各テーブルのカラム定義、データプレビュー
- **利用者一覧**: 利用者サマリー、各フォーム取込状況

## 📊 DB スキーマ概要

### メインテーブル (9個)

| # | テーブル | 説明 | 外部キー |
|---|---------|------|--------|
| 1 | `users` | 利用者基本情報 | - |
| 2 | `hosoku` | 利用者補足情報 (UPHOSOKU) | user_id |
| 3 | `plan1` | 居宅サービス計画1表 (UP1KYO) | user_id |
| 4 | `plan2` | 居宅サービス計画2表 (UP2KYO) | user_id |
| 5 | `plan3` | 居宅サービス計画3表 (UP3KYO) | user_id |
| 6 | `upplan` | サービス利用票(予定) (UPPLAN) | user_id |
| 7 | `upjsk` | サービス利用票(実績) (UPJSK) | user_id |
| 8 | `upsikyu` | サービス利用票別表 (UPSIKYU) | user_id |
| 9 | `registry` | ファイル取込履歴 | - |

### ビュー (2個)

| # | ビュー | 説明 |
|---|--------|------|
| 1 | `v_users_summary` | 利用者一覧(各種フォーム取込状況を含む) |
| 2 | `v_registry_summary` | 取込ファイル一覧 |

## 🔍 よくある確認クエリ

### 利用者一覧表示

```sql
SELECT * FROM v_users_summary ORDER BY hihosho_no LIMIT 10;
```

### 特定利用者の全データ表示

```sql
-- user_id=1 の場合
SELECT * FROM hosoku WHERE user_id = 1;
SELECT * FROM plan1 WHERE user_id = 1;
SELECT * FROM plan2 WHERE user_id = 1;
SELECT * FROM plan3 WHERE user_id = 1;
SELECT * FROM upplan WHERE user_id = 1 ORDER BY target_ym DESC;
SELECT * FROM upjsk WHERE user_id = 1 ORDER BY target_ym DESC;
SELECT * FROM upsikyu WHERE user_id = 1 ORDER BY target_ym DESC;
```

### テーブル統計

```sql
SELECT TABLE_NAME, TABLE_ROWS 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'careplan_db' 
ORDER BY TABLE_ROWS DESC;
```

### 対象年月別サービス利用件数

```sql
SELECT target_ym, COUNT(*) as件数, SUM(units) as総単位数
FROM upplan
GROUP BY target_ym
ORDER BY target_ym DESC;
```

### 取込ファイル一覧

```sql
SELECT * FROM v_registry_summary LIMIT 20;
```

## 💡 トラブルシューティング

### ❌ "Access denied for user 'careplan_user'@'localhost'"

**原因**: パスワードが間違っている、またはユーザーが存在しない

**解決**:
```bash
# root で接続してユーザーを確認
mysql -u root -p
mysql> SELECT user, host FROM mysql.user;
mysql> DROP USER 'careplan_user'@'localhost';
mysql> CREATE USER 'careplan_user'@'localhost' IDENTIFIED BY 'careplan123';
mysql> GRANT ALL PRIVILEGES ON careplan_db.* TO 'careplan_user'@'localhost';
mysql> FLUSH PRIVILEGES;
```

### ❌ "Unknown database 'careplan_db'"

**原因**: DB が作成されていない

**解決**:
```bash
mysql -u root -p
mysql> CREATE DATABASE careplan_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

### ❌ db-viewer.php が真っ白

**原因**: PHP エラーログを確認

**解決**:
```bash
# PHP エラーログを表示
php -S localhost:8000 -t . db-viewer.php

# ブラウザコンソール F12 で詳細を確認
```

### ❌ "SQLSTATE[HY000]: General error: 1030"

**原因**: 外部キーが無効

**解決**:
```sql
-- 外部キーチェックを有効化
SET FOREIGN_KEY_CHECKS = 1;
SHOW ENGINE INNODB STATUS;
```

## 📝 本番環境への注意

1. **パスワード管理**: config.php には本番パスワードを埋め込まない
   ```php
   const DB_PASS = getenv('DB_PASS') ?: 'default_password';
   ```

2. **バックアップ**: 定期的にダンプを取得
   ```bash
   mysqldump -u careplan_user -p careplan_db > backup_$(date +%Y%m%d).sql
   ```

3. **アクセス制限**: ローカルホストのみからのアクセスに限定
   ```sql
   GRANT ALL PRIVILEGES ON careplan_db.* TO 'careplan_user'@'127.0.0.1';
   ```

4. **インデックス**: 大規模データでは追加インデックスを検討
   ```sql
   CREATE INDEX idx_upplan_service_date ON upplan(service_date);
   ```

5. **監視**: スローログを有効化
   ```sql
   SET GLOBAL slow_query_log = 'ON';
   SET GLOBAL long_query_time = 2;
   ```

## 📚 参考リンク

- [MySQL 8.0 公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/ja/)
- [ケアプランデータ連携標準仕様](https://www.mhlw.go.jp/)
- [db/tools/README.md](db/tools/README.md) - 詳細なスキーマドキュメント
