我正在使用Postgres。
具有聊天机器人,我需要创建一个表来存储匹配项:
A与B配对,因此B与A配对。
我正在考虑是否要创建像这样的表:
CREATE TABLE matches (user_a INT, user_b INT);
并像这样保存一对:
INSERT INTO matches (1, 2);
或两次类似:
INSERT INTO matches (1, 2);
INSERT INTO matches (2, 1);
我也将只用一列查询表以检查用户“ 1”
在第一种情况下,我需要使用:
SELECT * FROM matches WHERE user_a=1 or user_b=1;
在第二种情况下,我可以使用以下命令进行查询:
SELECT * FROM matches WHERE user_a=1;
因为保存了比赛的双方。
我还需要将此表与另一个表连接。在第一种情况下,我需要做
SELECT * FROM users LEFT JOIN matches ON matches.user_a=users.user_id OR matches.user_b=users.user_id;
在第二种情况下,我可以避免执行OR:
SELECT * FROM users LEFT JOIN matches ON matches.user_a=users.user_id;
使用同一张表的两种方法中哪一种是最佳做法?我认为第一个可以节省一半的空间,但是第二个可能可以更规范化并提高性能。