0

我想创建一个主键email,nro为每个exnro的序号的表:email

user1@e.com, 1 
user1@e.com, 2
user2@e.com, 1 
create table proposta_de_correcao(
    email varchar(255) not null,
    nro serial not null,
    unique(nro,email),
    PRIMARY KEY(nro, email),
    FOREIGN KEY (email) REFERENCES Utilizador(email),
);

但我收到以下错误:

ERROR: there is no unique constraint matching given keys for referenced table "proposta_de_correcao"

我已经尝试过:

unique(nro,email)
contraint keys unique(nro,email)
4

1 回答 1

0

这里有两件事可以帮助您解决问题:

  1. 为什么ifnro不是serial数据库中的顺序字段?serial当您希望字段自动递增时使用类型(如在单个整数主键中)。也许你int在这里放一个类型会更好。

  2. 您的表中没有唯一约束。如果你创建一个小提琴,你可以看到代码运行良好:

    CREATE TABLE proposta_de_correcao(
        email VARCHAR(255) not null,
        nro SERIAL not null,
        UNIQUE(nro, email),
        PRIMARY KEY(nro, email)
        -- FOREIGN KEY (email) REFERENCES Utilizador(email)
    );

    INSERT INTO proposta_de_correcao VALUES ('user1@e.com', 1);
    INSERT INTO proposta_de_correcao VALUES ('user1@e.com', 2);
    INSERT INTO proposta_de_correcao VALUES ('user2@e.com', 1);

因此,我可以得出结论,当您要添加约束时,您的数据库在这两列中已经有重复的数据。尝试在测试数据库中创建上面提到的数据,你会看到它运行得很好。

我刚刚删除了外键约束以允许运行代码,因为我们在示例中没有引用的表,我们可以认为引用的表对答案中引用的问题没有影响。

这是小提琴

于 2020-05-09T15:45:20.863 回答