DB設計(mikyun_cloud)
1. DB基本情報
| 項目 | 内容 |
|---|---|
| DB名 | mikyun_cloud |
| エンジン | MariaDB |
| 配置 | R640(host 127.0.0.1:3306) |
| ユーザー | mikyun |
2. テーブル一覧
| 種別 | 名前 | 用途 |
|---|---|---|
| TABLE | contracts | 契約本体 |
| TABLE | customer_devices | 顧客端末 / WireGuard端末 |
| TABLE | admin_logs | 管理操作ログ |
| TABLE | contract_notes | 顧客メモ・通話記録 |
| VIEW | v_parent_conflicts | 親端末重複監査 |
3. contracts(契約テーブル)
契約本体。顧客ID、サブネット、容量、上限、状態を持つ。
| カラム名 | 型 | 説明 |
|---|---|---|
| id | bigint PK auto | 内部ID |
| contract_number | int unsigned UNI | 連番(表示用) |
| contract_id | varchar(32) UNI | 契約ID(例: 0001, M010)永久不変 |
| vpn_subnet | varchar(32) | 割当VPNサブネット(現在は固定 10.251.0.0/24) |
| next_child_ip | varchar(32) | 次割当IP候補(現在はDBスキャンで決定するため未使用) |
| customer_name | varchar(128) | 顧客名 |
| customer_email | varchar(255) MUL | メールアドレス |
| customer_phone | varchar(64) | 電話番号 |
| plan_name | varchar(64) | プラン名(例: standard) |
| storage_quota_gb | int DEFAULT 200 | 契約総容量 (GB) |
| max_devices | int DEFAULT 3 | 最大端末数 |
| max_files | int DEFAULT 10000 | 最大ファイル数 |
| bandwidth_profile | varchar(64) | 帯域プロファイル(例: standard) |
| contract_status | varchar(16) MUL | active / paused / terminated / deleted |
| identity_passphrase | text | 顧客ポータルログイン用パスフレーズ |
| nc_password | varchar(255) | Nextcloud親アカウントPW |
| nc_quota_gb | int DEFAULT 200 | NC割当容量 (GB) |
| opt_video_call | tinyint DEFAULT 0 | ビデオ通話オプション |
| created_at / updated_at | datetime | 作成・更新日時 |
4. customer_devices(端末テーブル)
契約配下の端末管理テーブル。WireGuardの鍵・IP・状態・統計を持つ中核テーブル。
| カラム名 | 型 | 説明 |
|---|---|---|
| id | bigint PK auto | レコードID |
| contract_id | varchar(32) MUL | 所属契約ID |
| device_id | varchar(64) UNI | 端末識別ID(例: 0001-DEV-001) |
| wg_iface | varchar(32) | WGインターフェース名(wg0 / wg1) |
| wg_ip | varchar(64) UNI | 割当WG IP(10.200.0.x / 10.251.0.x) |
| public_key | text UNI | WGクライアント公開鍵 |
| private_key | text | WGクライアント秘密鍵(DB保存) |
| preshared_key | text | WG事前共有鍵 |
| device_role | varchar(16) | parent / child |
| is_parent | tinyint DEFAULT 0 | 親端末フラグ(1=親) |
| status | varchar(16) MUL | issued / active / paused / revoked / expired / deleted |
| device_name | varchar(128) | 端末名 |
| platform | varchar(64) | iPhone / Android / Windows 等 |
| app_version | varchar(64) | アプリバージョン |
| issued_at | datetime | QR発行日時 |
| qr_expires_at | datetime | QR失効日時(発行+24h) |
| first_handshake_at | datetime MUL | 初回WG接続日時 |
| last_handshake_at | datetime MUL | 最終WG接続日時 |
| activated_at | datetime | 有効化日時 |
| parent_changed_at | datetime | 親変更日時 |
| parent_changed_by | varchar(64) | customer / admin |
| parent_change_reason | varchar(255) | 変更理由 |
| paused_at | datetime | 一時停止日時 |
| pause_reason | varchar(255) | 一時停止理由 |
| rx_bytes_total / tx_bytes_total | bigint DEFAULT 0 | 累計受信/送信バイト数 |
| rx_bytes_24h / tx_bytes_24h | bigint DEFAULT 0 | 24h受信/送信バイト数 |
| rx_bytes_month / tx_bytes_month | bigint DEFAULT 0 | 月次受信/送信バイト数 |
| storage_quota_gb | int DEFAULT 0 | 端末個別割当容量 (GB) |
| nc_user / nc_password | varchar | Nextcloudユーザー名/PW |
| nc_quota_gb | int | NC容量 |
| nc_enabled | tinyint DEFAULT 1 | NC有効フラグ |
| created_at / updated_at | datetime | 作成・更新日時 |
5. admin_logs(管理操作ログ)
| カラム名 | 型 | 説明 |
|---|---|---|
| id | bigint PK auto | 内部ID |
| action_type | varchar(64) | 操作種別 |
| target_type | varchar(64) | 対象種別(contract / device) |
| target_id | varchar(64) | 対象ID |
| message | text | 操作内容テキスト |
| created_at | datetime auto | 記録日時 |
6. v_parent_conflicts(VIEWテーブル)
1契約に親端末が複数存在する異常状態を検出するためのビュー。定期確認推奨。
SELECT contract_id, COUNT(*) AS parent_count FROM customer_devices WHERE is_parent = 1 AND deleted_at IS NULL GROUP BY contract_id HAVING COUNT(*) > 1
