没有唯一的约束匹配给定要引用的键

时间:2019-07-29 11:10:45

标签: postgresql

表格:A

            columns names
--------------------------
PK varchar |datasource
PK int     |programid
   int     |workspaceid

数据源和programid的pk组合键

表格:B

             columns names
---------------------------------------
PK varchar | datasource
PK int     | quantitycontractid
   int     | workspaceid

数据源和数量合同编号的复合pk密钥

我需要在这些表之间建立关系,但要使用workspaceid和数据源。所以我照常尝试:

ALTER TABLE A
ADD CONSTRAINT fk_relation
FOREIGN KEY (workspaceid, datasource) 
REFERENCES B(workspaceid, datasource)

我遇到以下错误:

  

没有唯一的约束匹配给定表的键   “ B”

2 个答案:

答案 0 :(得分:0)

您需要先将UNIQUE key添加到B(workspaceid, datasource),然后再将其视为表A中的外键。这是为了确保两个表之间正确的一对一或一对多关系。 / p>

ALTER TABLE B
ADD CONSTRAINT unq_contraint
UNIQUE KEY (workspaceid, datasource)

答案 1 :(得分:0)

该错误对我来说非常有意义,您的表B没有链接到workspaceid的任何唯一索引或主键。话虽如此,您对B的表结构对我来说有点奇怪。大多数数据库具有一个主键,该主键是自动递增的,并且一个或多个外键链接到其他表。您似乎已将主键组合为多个外键。在这种情况下,您将遇到描述的问题,并且在查询表时会有复杂的联接。 Vishal R已经回答了如何解决您的问题。