簡體   English   中英

Postgres-唯一約束

[英]Postgres - unique constraint

當我嘗試創建第二個表時遇到了以下錯誤,但我不知道為什么。 對於專利表,我希望能夠將(idfuncionario,titulo)作為主鍵。 正如其他主題中所建議的那樣,我已經嘗試將UNIQUE約束設置為“ UNIQUE(idfuncionario,ticulo)”。

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

引用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM