存储在 Postgres 中的 ID 数组应该使用 varchar、int 还是其他类型?

cro*_*ies 7 postgresql

创建包含外键数组的字段的正确约定是什么?在这种特殊情况下,我创建了一个名为“owners”的字段,该字段将保存一组用户 ID。我想确保我选择了正确的类型以最大限度地提高速度并遵循惯例。

谢谢。

Fra*_*eil 10

“一种真正的方法”是创建一个表并使用外键:

CREATE TABLE owners(
    user_id int references users
  , account_id int references accounts
  , primary key(user_id, account_id)
);
Run Code Online (Sandbox Code Playgroud)

这样你就可以使用一个简单的查询来验证成员资格:

SELECT user_id, account_id FROM owners WHERE user_id = X AND account_id = Y
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法获取帐户的所有者列表:

SELECT user_id FROM owners WHERE account_id = X
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用反向查询查找用户拥有的所有帐户:

SELECT account_id FROM owners WHERE user_id = X
Run Code Online (Sandbox Code Playgroud)