🙁

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