我有以下表格:
CREATE TABLE "PostViews"
(
"createdAt" timestamp with time zone NOT NULL,
"updatedAt" timestamp with time zone NOT NULL,
"PostId" integer NOT NULL,
"UserId" integer NOT NULL,
CONSTRAINT "PostViews_pkey" PRIMARY KEY ("PostId", "UserId"),
CONSTRAINT "PostViews_PostId_fkey" FOREIGN KEY ("PostId")
REFERENCES "Posts" (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT "PostViews_UserId_fkey" FOREIGN KEY ("UserId")
REFERENCES "Users" (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
这是一个连接表,它将许多Users
与许多Posts
与复合pk PostId,UserId
相关联。我要做的是从PostId,UserId
中删除唯一性,以便允许每个用户每个帖子存储多个PostView
。
PostId,UserId
添加索引(或先添加索引然后再删除pk)?id serial
列,将其设为pk,然后删除化合物pk?答案 0 :(得分:1)
您没有解释updatedAt
列目的,因此我会删除它,将createdAt
重命名为viewedAt
并将其作为PK的一部分:
constraint PostViews_pkey PRIMARY KEY (PostId, UserId, viewedAt)
用户在同一时间两次查看帖子的可能性微不足道。如果要提供该案例,请将客户端插入代码包装在try/catch
中,并在出现PK异常时重试。
不要对标识符使用双引号。这将是一个真正的痛苦。