主键约束的最佳实践?

时间:2019-05-26 18:45:02

标签: database postgresql primary-key uuid

我想知道使用主键时在Postgresql数据库中最好。

如果存在一个包含两个UUID列的表(如user1和user2),则最好使用约束键或仅将这两个列定义为唯一而没有任何主键,因为在PostgreSQL中,您只能在其中有一个主键桌子吗?

示例:

CREATE TABLE user_relation(
    sender_user_id UUID NOT NULL,
    receiver_user_id UUID NOT NULL,
    status INT NOT NULL,
    chat_id BIGINT,
    UNIQUE (chat_id),
    CONSTRAINT user_relation_pk UNIQUE(sender_user_id, receiver_user_id)

还是将两个“主键”都定义为像这样的唯一值会更好吗?

CREATE TABLE user_relation(
    sender_user_id UUID NOT NULL,
    receiver_user_id UUID NOT NULL,
    status INT NOT NULL,
    chat_id BIGINT,
    UNIQUE (sender_user_id, receiver_user_id, chat_id)
)

1 个答案:

答案 0 :(得分:0)

您的两个表定义完全不同。

UNIQUE(a, b, c)

不是不是意味着这些列中的每一列都是唯一的,但是所有这三列的组合都是唯一的(即,表中不能有两次相同的三元组)。

从技术上讲,主键不过是添加了NOT NULL的唯一约束,因此使用哪个键作为主键并不重要。

与许多其他人不同,我认为ist并不是引入人工主键的必要条件。只要您确定

  1. 所选列感觉像是数据的“良好表示”。

  2. 列的值永远不会改变

我认为将其用作主键没有问题。