讨厌的 sql 错误(POSTGRES)"There is no unique constraint matching given keys for referenced table..."

Nasty sql error(POSTGRES) "There is no unique constraint matching given keys for referenced table..."

编辑:tables 已从我的语言翻译成英语我已将 table 中的外键引用更改为评论 "Utente" -> "User"

大家好,我正在尝试在 sql 中构建一个小型评论系统,如下所示。每个用户都可以对某些项目(可以是任何东西)发表评论,任何其他用户都可以回答任何评论。网站管理员不能post评论自己,he/she只能回答用户的评论...这里是代码一步步解释。

用于定义实体的表 "User" 和 "Comment"

create table User(
  Username varchar(15),
  Email varchar (25),
  Nome varchar (25),
  Foto varchar (35),
  primary key (Username, Email) 
);

create table Comment (
  Username varchar(15),
  Email varchar(25),
  DateComment timestamp not null,
  Text varchar(250),    
  primary key(DateComment, Text, Email, Username),
  foreign key(Username, Email) references User(Username, Email)
        On update cascade
        On delete set null
);

每个用户都可以 post 对特定项目发表评论,任何用户也可以像这样回答评论:

create table Answer
(
   AnswerText varchar(500),
   DateAndTime timestamp not null,
   DateComment timestamp not null,
   Text varchar(500),
   Username varchar(15),
   Email varchar (25),
   primary key(AnswerText, DateAndTime, DateComment, Text, Username, Email),
    foreign key(DateComment, Text) references Comment(DateComment, Text)
        On update cascade
        On delete set null,
    foreign key(Username, Email) references User(Username, Email)
        On update cascade
        On delete set null
);

网站管理员不能post评论自己,he/she只能回答 为了其他人的评论,所以我创建了这些 tables

create table Admin(
    AdminName varchar(20) primary key

);

create table AdminAnswers
(
    DataComment timestamp not null,
    Text varchar(500),
    DateAndTime timestamp not null,
    AdminName varchar(20) unique,
    primary key(DataComment, Text, DateAndTime, AdminName),
    foreign key (DateComment, Text) references Comment(DateComment, Text)
        On update cascade
        On delete no action,
    foreign key(DateAndTime) references Answer(DateAndTime)
        On update cascade
        On delete no action,
        foreign key (AdminName) references Admin(AdminName) 
        On update no action
        On delete no action

);

Postgres 说 "There is no unique constraint matching keys for referenced table 'Comment'"...我看了一些答案并尝试添加 'unique' 我的 table 'User' 的属性,但我无法克服它。 ddl 文件非常大,所以如果需要,我会 post 更多代码。感谢您的回答!

Ps。我知道使用 "CommentId" 或 "UserId" 等属性会更容易,但不幸的是,该项目需要以这种方式实施。

不包括在创建答案 table 之前向您的评论 table 添加唯一约束的拼写错误将防止此错误。您可以将其作为独立语句执行,如下所示:

alter table comment add constraint unique_for_fk unique(DateComment, Text);

或者您可以更新 table 脚本以在 table 创建时包含它:

create table Comment (
  Username varchar(15),
  Email varchar(25),
  DateComment timestamp not null,
  Text varchar(250),    
  primary key(DateComment, Text, Email, Username),
  foreign key(Username, Email) references "User"(Username, Email)
        On update cascade
        On delete set null,
  CONSTRAINT unique_for_fk UNIQUE( DateComment, Text)
);