弱实体postgresql
Weak Entity postgresql
我想创建一个 table,其中主键 email,nro
是 nro
每个 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)
这里有两件事可以帮助您解决问题:
为什么 nro
是 serial
如果不是数据库中的顺序字段? serial
当您希望字段自动递增时使用类型(如在单个整数主键中)。也许你在这里输入 int
会更好。
您的 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。
我想创建一个 table,其中主键 email,nro
是 nro
每个 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)
这里有两件事可以帮助您解决问题:
为什么
nro
是serial
如果不是数据库中的顺序字段?serial
当您希望字段自动递增时使用类型(如在单个整数主键中)。也许你在这里输入int
会更好。您的 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。