当我尝试创建第二个表时,我遇到以下错误,我无法弄清楚原因。 对于table patente,我希望能够将(idfuncionario,titulo)作为主键。 我已经尝试将UNIQUE约束设置为“UNIQUE(idfuncionario,titulo),如其他主题中所建议的那样。”
CREATE TABLE publicacao
(
idfuncionario CHAR(5) NOT NULL,
titulo VARCHAR(50) NOT NULL,
data TIMESTAMP NOT NULL,
PRIMARY KEY (idfuncionario, titulo),
FOREIGN KEY(idfuncionario) REFERENCES trabalha(idfuncionario)
);
CREATE TABLE patente
(
idfuncionario CHAR(5) NOT NULL,
titulo VARCHAR(50) NOT NULL,
datafim TIMESTAMP NOT NULL,
descricao VARCHAR(100) NOT NULL,
PRIMARY KEY (idfuncionario, titulo),
FOREIGN KEY(idfuncionario) REFERENCES trabalha(idfuncionario),
FOREIGN KEY(titulo) REFERENCES publicacao(titulo)
);
邮件错误:
错误:没有唯一约束匹配引用表“publicacao”的给定键 SQL状态:42830
我在Windows 8.1 64位上使用Postgres 9.4
答案 0 :(得分:2)
引用publicacao
的外键必须引用该表的主键。因此,您希望在创建patente
时执行以下操作:
CREATE TABLE patente
(
idfuncionario CHAR(5) NOT NULL,
titulo VARCHAR(50) NOT NULL,
datafim TIMESTAMP NOT NULL,
descricao VARCHAR(100) NOT NULL,
PRIMARY KEY (idfuncionario, titulo),
FOREIGN KEY (idfuncionario) REFERENCES trabalha (idfuncionario),
FOREIGN KEY (idfunctionario, titulo) REFERENCES publicacao (idfuncionario,titulo)
);
我认为idfunctionario
上的外键在这种情况下是多余的。
另一方面,也许当您创建publicacao
时,您打算将其主键仅包含列titulo
?