はじめに
この記事では、Supabaseで中間テーブルとリレーションを設定する際に発生した「UNIQUE制約」に関するエラーについて取り上げます。特に、データ挿入時に発生した重複データによる問題と、その解決方法を解説します。
この記事は個人的なアウトプットを目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです。
原因
以下のエラーメッセージが発生しました。
insert or update on table "users" violates foreign key constraint "users_user_id_fkey
このエラーは、外部キーの制約に違反していることを示しています。具体的には、外部キーに設定されているデータが、参照先のテーブルに存在しないか、他の制約により挿入がブロックされています。
解決方法
エラーの原因を調べたところ、UNIQUE
制約が影響していることが判明しました。以下の画像の通り、Is Unique
にチェックが入っていたため、同じuser_id
やskill_id
の組み合わせが複数挿入できない状態でした。
UNIQUE
制約が設定されている場合、同じデータの重複挿入が制限されます。今回はUNIQUE
制約を外すことで問題を解決できました。
制約を解除した後、user_skill
テーブルに以下のようなデータを挿入できるようになりました。
user_skill テーブル:
-------------------------
user_id | skill_id
-------------------------
101 | 1 (React)
102 | 1 (React)
103 | 2 (Vue)
このように、異なるユーザーが同じスキル(skill_id
)を持っている場合でも、制約が解除されることでデータが正常に挿入できるようになります。
終わりに
外部キーの制約やUNIQUE
制約は、データの一貫性を保つために重要ですが、今回のように状況に応じて制約を柔軟に解除することで、問題を解決することができました。特に中間テーブルを使用する際は、制約の設定に注意する必要があります。