【SSMS】外部キー リレーションシップを作成しようとすると競合エラーになるときの原因と解決方法【SQL Server】

こんにちは、Noyです。

掲題のエラーで少しだけハマったので備忘録として残します。

エラー内容

SSMSで2つのテーブルのリレーションシップを作成しようとすると、以下エラーが発生。

テーブル 'Account (user)' は正常に保存されました
テーブル 'Like (post)'
- リレーションシップ 'FK_Like_Info' を作成できません。
ALTER TABLE ステートメントは FOREIGN KEY 制約 "FK_Like_Info" と競合しています。競合が発生したのは、データベース "YumeSetori"、テーブル "user.Account", column 'user_id' です。

外部キーって1つのテーブルに複数設定するとおかしくなるっけ?いやでもそんなことないよな…とか色々考えたり調べてもすぐに分からず。ただ、よくよく外部キーの格納データを見てみるとおかしいことに気づきました。

原因と解決策

主キーテーブルに存在しないidを、外部キーテーブルに設定していたからでした。

今回の場合、「Account(主キーテーブル)のuser_idに存在しないid」を「Like(外部キーテーブル)のlike_user_id」に設定していました。

これでは外部キーとしての整合性が取れていないためエラーとなっていました。

主キーテーブルに存在するidだけを外部キーテーブルのidに設定してあげるとエラーが出ずにリレーションシップを作成できました。

(エラー内容からは分かりにくいよなあ…と若干思いつつも)めでたしめでたし。

コメント

タイトルとURLをコピーしました