Postgres - 独特的约束

时间:2015-01-08 03:33:41

标签: sql postgresql

当我尝试创建第二个表时,我遇到以下错误,我无法弄清楚原因。 对于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

1 个答案:

答案 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