web-dev-qa-db-ja.com

mysqlテーブル内の複数の外部キーを同じ主キーに

テーブルuserがあり、userIDが主キーです。 Friendsという別のテーブルがあります。 Friendsテーブルには、UserIDFrndIDの列で表される友達として2人のユーザーがいます。UserIDFrndIDは両方ともテーブルuserIDuser

データの整合性を確保したい。このようなものを使用できますか?

ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`userId`, `friendId`)
REFERENCES `users` (`userId`, `userId`) ON DELETE CASCADE ON UPDATE CASCADE;

知りたいのはREFERENCESusers(ユーザーID,ユーザーID)列を正しく複数回参照していますか? 2つの個別の制約を作成しない理由は、両方のユーザーがテーブルuserに存在する必要があるためです。

13
user1765876

いいえ、2つの外部キーを作成する必要があります。

ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`userId`) 
  REFERENCES `users` (`userId`) 
  ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`friendId`) 
  REFERENCES `users` (`userId`) 
  ON DELETE CASCADE ON UPDATE CASCADE;
14
Bill Karwin