Sql 重复的键值违反了唯一约束,但不应';T

Sql 重复的键值违反了唯一约束,但不应';T,sql,postgresql,Sql,Postgresql,我有两个表格,一个叫做“人”,另一个叫做“结果” persons有一个ID和一个playername 结果有一个ID、一个playerID、一个分数和时间 在我看来,结果中的“playerID”不应该是唯一的(因为同一玩家可以有多个分数),但在执行此查询时: insert into results (playerid, score, time) values ((select id from persons where playername = 'Dylan'),100,100); 我得到了错

我有两个表格,一个叫做“人”,另一个叫做“结果”

persons有一个ID和一个playername

结果有一个ID、一个playerID、一个分数和时间

在我看来,结果中的“playerID”不应该是唯一的(因为同一玩家可以有多个分数),但在执行此查询时:

insert into results (playerid, score, time) values
((select id from persons where playername = 'Dylan'),100,100);
我得到了错误

ERROR:  duplicate key value violates unique constraint "results_playerid_key"
DETAIL:  Key (playerid)=(1) already exists.
这可能是数据库中的错误吗?(数据库由我所在大学的几位讲师管理,我无法更改任何设置)


感谢您提供的任何见解。

尽管对您(甚至对我来说)来说这似乎是合乎逻辑的,但对于管理数据库的人员来说,这可能听起来不合乎逻辑,因此他们将
playerid作为唯一的约束条件

可能是出错了,他们想将
id
设置为自动递增主键?即使无法更改约束,您是否至少可以调查模式以查看约束是什么


很可能DB背后的想法是每个玩家都有一个结果,你知道这个选择背后潜在的业务或应用程序逻辑吗?

你是否尝试过将结果表中的外键重命名为非“playerid”(我会使用玩家id或玩家编号)的名称?还要确保它是结果表中的一个数字,并且没有设置为唯一值

不,这不是数据库的错误(除非您指的是它的设计/概念中的潜在错误)。该列具有唯一的约束,因此不能向其中插入重复的值。如果您不想要该约束,则需要删除it@Clive是的,如果我的问题不够清楚,我很抱歉。我知道约束是在数据库上,但我认为这可能是设计中的错误!谢谢谢谢你的回答。我必须确保我的问题不是因为某些原因而错的。它们在另一个字段上有一个自动递增的ID。你说得很好,“人们觉得这听起来不合逻辑……”。因此,我决定给其中一位讲师发封邮件,询问她是否可以详细说明在钥匙上有独特约束的背后的逻辑。非常感谢。