我想知道使用主键时在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)
)
答案 0 :(得分:0)
您的两个表定义完全不同。
UNIQUE(a, b, c)
不是不是意味着这些列中的每一列都是唯一的,但是所有这三列的组合都是唯一的(即,表中不能有两次相同的三元组)。
从技术上讲,主键不过是添加了NOT NULL
的唯一约束,因此使用哪个键作为主键并不重要。
与许多其他人不同,我认为ist并不是引入人工主键的必要条件。只要您确定
所选列感觉像是数据的“良好表示”。
列的值永远不会改变
我认为将其用作主键没有问题。