テーブルリレーション
Subseek の DB スキーマにおけるテーブル間のリレーションを Mermaid ER 図で可視化する。各テーブルの詳細定義は DBスキーマ を参照。
全体 ER 図
アプリケーション管理テーブルと Better Auth 管理テーブルを含む全体像。
リレーション一覧
users を起点としたリレーション
| 関係 | 相手テーブル | カーディナリティ | 削除時の挙動 | 用途 |
|---|---|---|---|---|
| sessions | sessions | 1:N | CASCADE | ログインセッション |
| accounts | accounts | 1:N | CASCADE | OAuth プロバイダーごとの連携情報 |
| billing_accounts | billing_accounts | 1:1 | なし | プラン・クレジット残高・Stripe 顧客 |
| user_video_access | user_video_access | 1:N | なし(履歴として残す) | クレジット消費履歴・動画アクセス権 |
| favorite_channels | favorite_channels | 1:N | CASCADE | お気に入りチャンネル |
| search_histories | search_histories | 1:N | CASCADE | 検索履歴 |
注記
user_video_access と billing_accounts は CASCADE しない。ユーザー削除後もクレジット消費履歴や billing 履歴(返金・監査ログ要件を含む)を残して運用・分析に利用するため、アプリケーション側で論理削除・匿名化を行う方針。
channels を起点としたリレーション
| 関係 | 相手テーブル | カーディナリティ | 削除時の挙動 | 用途 |
|---|---|---|---|---|
| videos | videos | 1:N | なし | チャンネル配下の動画一覧 |
| favorite_channels | favorite_channels | 1:N | なし | お気に入りされているユーザー |
videos を起点としたリレーション
| 関係 | 相手テーブル | カー ディナリティ | 削除時の挙動 | 用途 |
|---|---|---|---|---|
| user_video_access | user_video_access | 1:N | なし | 動画を閲覧したユーザーのアクセス権 |
複合主キー
| テーブル | 主キー構成 | 備考 |
|---|---|---|
user_video_access | (user_id, video_id) | ユーザー × 動画の一意制約 |
favorite_channels | (user_id, channel_id) | ユーザー × チャンネルの一意制約 |
Better Auth 管理テーブルの扱い
users / sessions / accounts / verifications は Better Auth が管理するため、drizzle.config.ts の tablesFilter からは除外されている(マイグレーション対象外)。ただしアプリケーションテーブルから FK 参照するため、スキーマ定義自体は packages/db/src/schema/auth-schema.ts に残している。
- Better Auth 自体がテーブルのマイグレーションを行う
- Drizzle ORM からは読み取り・FK 参照のみ行う
- ER 図には参考として掲載
スキーマ定義ファイル
実装は packages/db/src/schema/ 配下を参照。
| ファイル | 対応テーブル |
|---|---|
auth-schema.ts | users / sessions / accounts / verifications |
channels/channels.ts | channels |
videos/videos.ts | videos |
user-video-access/user-video-access.ts | user_video_access |
billing-accounts/billing-accounts.ts | billing_accounts |
favorite-channels/favorite-channels.ts | favorite_channels |
search-histories/search-histories.ts | search_histories |