5

主キー _id を持つユーザー用の MySQL テーブルがあり、友情 (他のユーザーの友人リストの可視性) を userId 外部キーのペアを持つテーブルとして表現したいと考えています。私は次のようなことを考えています:

CREATE TABLE UserFriendships (
  userIdA INT NOT NULL,
  userIdB INT NOT NULL,
  PRIMARY KEY (userIdA, userIdB),
  FOREIGN KEY (userIdA) REFERENCES Users(_id)
  FOREIGN KEY (userIdB) REFERENCES Users(_id)
)

これにより、 と を別々の行として挿入できるようになると理解してい(userIdA = 2, userIdB = 7)ます(userIdA = 7, userIdB = 2)。友情ごとに 1 つの行、つまり、userId のペアごとに 1 つの行が必要です。

これを改善する方法を知っている人はいますか?上記の制約が満たされていても、ユーザー foo のすべてのフレンドのリストを取得するには、次のようなユニオンを実行する必要がありますSELECT userIdB AS friendUserId WHERE userIdA = foo UNION SELECT userIdA WHERE userIdB = foo。これはそのクエリを実行するための最良の方法ですか、それともスキーマの変更を検討する必要がありますか?

4

1 に答える 1