【发布时间】:2020-10-15 19:45:43
【问题描述】:
好吧,我用谷歌搜索,显然发现了无穷无尽的结果,但没有一个是有帮助的。
错误似乎是不言自明的......但我看不出在这种情况下我做错了什么:
CREATE TABLE Contrat
(ID_contrat int identity(1,1),
ID_client int,
code_contrat int,
date_début date,
date_fin date,
status_contrat varchar(20),
Totalité int,
montant_mensuel int,
CONSTRAINT PK_composed2 primary key(ID_contrat,ID_client,code_contrat),
CONSTRAINT FK_3 foreign key(code_contrat) references type_contract(code_type_contract) ON DELETE CASCADE,
CONSTRAINT FK_4 foreign key(ID_Client) references Clients(ID_Client) ON DELETE CASCADE
)
CREATE TABLE FonctionContract
(ID_FonctionContract int identity(1,1),
ID_contract int,
ID_fonction int,
nombre int,
prix_unitaire numeric(16,2),
Constraint PK_composed primary key(ID_fonctionContract, ID_Contract, ID_Fonction),
Constraint FK_11 foreign key(ID_contract) references Contrat(ID_contrat) ON DELETE CASCADE,
Constraint FK_2 foreign key(ID_Fonction) references Fonction(ID_fonction) ON DELETE CASCADE
)
错误发生在最后一行 (FK_11) 的前面。
一些结果表明我也应该做一个组合外键,但我不知道当我有 ID_FonctionContract 没有被链接到任何地方时。
【问题讨论】:
-
Y我们的主键是
(ID_contrat,ID_client,code_contrat)而不是ID_contrat。FOREIGN KEY必须引用这些列的所有。错误实际上是在告诉你问题所在。 -
所以你是说问题实际上来自第一个表而不是第二个?因为尽管听起来很奇怪,但第一张桌子可以正常工作。我只在第二张桌子上有错误。
-
不,我是说您正在创建的
FOREIGN KEY正在尝试引用由 仅 列ID_contrat组成的UNIQUE INDEX或PRIMARY KEY表Contrat;那是不存在的。唯一的UNIQUE INDEX或PRIMARY KEY表Contrat位于ID_contrat,ID_client,code_contrat列上,因此它不适用于仅引用其中一个列的键。 -
ID_fonctionContract 只是表的唯一标识符,我为什么要在某个地方引用它?
-
ID_fonctionContract是表中的主键FonctionContract;与这里的问题无关。
标签: sql sql-server