讨厌的sql错误(POSTGRES)“没有唯一的约束匹配给定表的键...”

问题描述 投票:0回答:1

[大家好,我正在尝试按照以下方法在sql中构建小型审核系统。每个用户都可以评论某个项目(可以是任何内容),其他任何用户都可以回答任何评论。网站的管理员本身无法发布评论,他/她只能回答用户的评论...这是逐步解释的代码。

用于定义实体“用户”和“注释”的表

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 Utente(Username, Email)
        On update cascade
        On delete set null
);

每个用户都可以在特定项目上发表评论,任何用户都可以这样回答评论:

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
);

该网站的管理员本身无法发表评论,他/她只能回答别人的评论,所以我创建了这些表

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 (DataCommento, Testo) references Commento(DataCommento, Testo)
        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说“被引用的表'Comment'没有唯一的约束匹配键” ...我已经看了一些答案,我试图添加'unique'到我的表“用户”的属性,但我无法克服它。 ddl文件很大,因此如果需要,我会发布更多代码。感谢您的回答!

Ps。我知道拥有一些属性,例如“ CommentId”或“ UserId”会更容易,但是不幸的是,该项目需要以这种方式实施。

sql postgresql foreign-keys ddl unique-constraint
1个回答
0
投票

评论表中是否有错字

foreign key(Username, Email) references Utente(Username, Email)

Utente应该是什么?这应该参考用户表。

© www.soinside.com 2019 - 2024. All rights reserved.