メインコンテンツまでスキップ

テーブルリレーション

Subseek の DB スキーマにおけるテーブル間のリレーションを Mermaid ER 図で可視化する。各テーブルの詳細定義は DBスキーマ を参照。

全体 ER 図

アプリケーション管理テーブルと Better Auth 管理テーブルを含む全体像。

リレーション一覧

users を起点としたリレーション

関係相手テーブルカーディナリティ削除時の挙動用途
sessionssessions1:NCASCADEログインセッション
accountsaccounts1:NCASCADEOAuth プロバイダーごとの連携情報
subscriptionssubscriptions1:Nreference_id 経由)なしStripe サブスクリプション(Better Auth 管理、"free" は行を持たない)
user_video_accessuser_video_access1:Nなし(履歴として残す)クレジット消費履歴・動画アクセス権
favorite_channelsfavorite_channels1:NCASCADEお気に入りチャンネル
search_historiessearch_histories1:NCASCADE検索履歴
referred_byusers(自己参照)N:1(referred_by 経由)SET NULL紹介者と被紹介者の関係。紹介者が退会しても被紹介者のアカウントは残す
ad_reservationsad_reservations1:Nなし(履歴として残す)ダイレクト広告の予約
advertiser_profilesadvertiser_profiles1:Nなし(プロフィールは履歴として残す)ダイレクト広告の広告主プロフィールマスタ。個人/法人の使い分けや代理店的運用のため UNIQUE にはしない
注記

user_video_accesssubscriptionsad_reservationsadvertiser_profilesCASCADE しない。ユーザー削除後もクレジット消費履歴・Stripe 課金履歴・広告配信履歴・広告主プロフィール(返金・監査ログ要件・特商法対応を含む)を残して運用・分析に利用するため、アプリケーション側で論理削除・匿名化を行う方針。

注記

subscriptions.reference_id は FK 制約を持たない(Better Auth Stripe プラグインの仕様)。将来 organization 単位の課金を導入したときに、reference_idusers.id / organizations.id の両方で使い回せるようにしている。

channels を起点としたリレーション

関係相手テーブルカーディナリティ削除時の挙動用途
videosvideos1:Nなしチャンネル配下の動画一覧
favorite_channelsfavorite_channels1:Nなしお気に入りされているユーザー

videos を起点としたリレーション

関係相手テーブルカーディナリティ削除時の挙動用途
user_video_accessuser_video_access1:Nなし動画を閲覧したユーザーのアクセス権

ad_slots を起点としたリレーション

関係相手テーブルカーディナリティ削除時の挙動用途
ad_reservationsad_reservations1:Nなしスロット内の各 position の予約

advertiser_profiles を起点としたリレーション

関係相手テーブルカーディナリティ削除時の挙動用途
ad_reservationsad_reservations1:Nなし(snapshot として残す)契約時点の事業者情報のコピー元

ad_reservations を起点としたリレーション

関係相手テーブルカーディナリティ削除時の挙動用途
ad_click_logsad_click_logs1:Nなし(予約削除後もログは残す)クリック計測ログ
ad_impression_dailyad_impression_daily1:Nなしインプレッション日次集計(CTR 算出用)

複合主キー

テーブル主キー構成備考
user_video_access(user_id, video_id)ユーザー × 動画の一意制約
favorite_channels(user_id, channel_id)ユーザー × チャンネルの一意制約

Better Auth 管理テーブルの扱い

users / sessions / accounts / verifications は Better Auth が管理するため、drizzle.config.tstablesFilter からは除外されている(マイグレーション対象外)。ただしアプリケーションテーブルから FK 参照するため、スキーマ定義自体は packages/db/src/schema/auth-schema.ts に残している。

  • Better Auth 自体がテーブルのマイグレーションを行う
  • Drizzle ORM からは読み取り・FK 参照のみ行う
  • ER 図には参考として掲載

スキーマ定義ファイル

実装は packages/db/src/schema/ 配下を参照。

ファイル対応テーブル
auth-schema.tsusers / sessions / accounts / verifications
channels/channels.tschannels
videos/videos.tsvideos
user-video-access/user-video-access.tsuser_video_access
subscriptions/subscriptions.tssubscriptions
favorite-channels/favorite-channels.tsfavorite_channels
search-histories/search-histories.tssearch_histories
ad-slots/ad-slots.tsad_slots
advertiser-profiles/advertiser-profiles.tsadvertiser_profiles
ad-reservations/ad-reservations.tsad_reservations
ad-click-logs/ad-click-logs.tsad_click_logs
ad-impression-daily/ad-impression-daily.tsad_impression_daily