弱实体postgresql

Weak Entity postgresql

我想创建一个 table,其中主键 email,nronro 每个 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)

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

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

  2. 您的 table 没有唯一限制。如果你创建一个fiddle,你可以看到代码运行很好:

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

所以,我可以得出结论,当你想添加约束时,你的数据库已经在这两列中有重复的数据。尝试在测试数据库中创建上述数据,您会完美地看到 运行s。

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

这是 fiddle