Postgres:用于保存关联对的设计表

问题描述 投票:0回答:1

我正在使用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;

使用同一张表的两种方法中哪一种是最佳做法?我认为第一个可以节省一半的空间,但是第二个可能可以更规范化并提高性能。

sql database postgresql
1个回答
1
投票
© www.soinside.com 2019 - 2024. All rights reserved.