🙁
supabase外部キー設定時のCASCADEとRESTRICTについて
🧠 具体例で解説
✅ CASCADE の場合:
削除時(Action if referenced row is removed = CASCADE)
profiles.id = "user123" を削除
→ posts.profile_id = "user123" の投稿も 一緒に削除される!
更新時(Action if referenced row is updated = CASCADE)
profiles.id = "user123" → "user999" に変更
→ posts.profile_id も "user999" に自動で更新される!
✅ RESTRICT の場合:
profiles.id = "user123" を削除しようとする
でも、posts.profile_id = "user123" がまだ使ってる
→ 削除できない(エラーになる)
💡 どれを使うのがいい?
状況 オススメ設定
投稿とプロフィールが強く結びついてる(削除も一緒にしたい) CASCADE
投稿は絶対消したくない/消す前に確認したい RESTRICT
投稿は残すがプロフィールが消えることもある SET NULL も選択肢
✅ まとめ
項目 説明
Action if referenced row is updated 親のIDが変更された時どうするか
Action if referenced row is removed 親のデータが削除された時どうするか
CASCADE 子も一緒に変わる・消える
RESTRICT 親を変えられない・消せない
Discussion