主キー _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
。これはそのクエリを実行するための最良の方法ですか、それともスキーマの変更を検討する必要がありますか?