columns names
--------------------------
PK varchar |datasource
PK int |programid
int |workspaceid
数据源和programid的pk组合键
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”
答案 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已经回答了如何解决您的问题。