错误:找不到主表的引用字段的唯一索引

时间:2016-03-08 12:48:26

标签: mysql sql database ms-access

我正在尝试使用AnySQL Maestro脚本创建数据库。我有以下代码:

create table KLANT
(
   Klantnr integer,
   Naam varchar(255),
   Adres varchar(255),
   Plaats varchar(255),

   constraint pk_klant
   primary key (Klantnr)
); -- go


create table MEDEWERKER
(
   Mdwnr integer,
   Naam varchar(255),
   Telnr integer,
   Afdnr integer,

   constraint pk_medewerker
   primary key (Mdwnr)       
); -- go

create table AFDELING
(
   Afdnr integer,
   Afdnaam varchar(255),
   Mdwnr integer,

   constraint pk_afdeling
   primary key (Afdnr)
); -- go

alter table MEDEWERKER
add constraint fk_medewerker_afdeling foreign key(Afdnr) references Afdeling(Afdnr);

alter table AFDELING
add constraint fk_afdeling_medewerker foreign key(Mdwnr) references Medewerker(Mdwnr);


create table TAAK
(
   Taaknr integer,
   ProjID integer,
   Urenomvang integer,

   constraint pk_taak
   primary key (Taaknr, ProjID)
); -- go

create table Project
(
   ProjID integer,
   ProjNaam varchar(255),
   Startdatum varchar(255),
   Sluitdatum varchar(255),
   Klantnr integer,
   Mdwnr integer,
   ParentProjid integer,

   constraint pk_project
   primary key (ProjID),

   constraint fk_project_klantnr
   foreign key(Klantnr) references klant(Klantnr),

   constraint fk_project_medewerker
   foreign key(Mdwnr) references medewerker(Mdwnr)
); -- go

alter table TAAK
    add constraint fk_taak_project foreign key(ProjID) references    Project(ProjID);

create table Assignment
(
   Mdwnr integer,
   ProjID integer,
   Taaknr integer,
   Weeknr integer,
   AantalUren integer,

   constraint pk_assignment
   primary key (Mdwnr, ProjID, Taaknr, Weeknr),

   constraint fk_assignment_medewerker
   foreign key(Mdwnr) references medewerker(Mdwnr),

   constraint fk_assignment_project
   foreign key(ProjID) references Project(ProjID),

   constraint fk_assignment_taak
   foreign key(Taaknr) references Taak(Taaknr)       
); -- go

不幸的是,最后一个表Assignment给出了以下错误消息:

找不到主表的引用字段的唯一索引

有人能帮助我吗?我被困了

2 个答案:

答案 0 :(得分:1)

Taak上的主键由两列组成:

 constraint pk_taak primary key (Taaknr, ProjID)

您的约束仅引用其中一个。

您还需要ProjID

约束fk_assignment_taak        外键(Taaknr,ProjID)引用Taak(Taaknr,ProjID)

答案 1 :(得分:1)

错误消息非常清楚地指出了问题。

TAAK 中的 Taaknr 列是主键的一部分,但并不强制它本身是唯一的。所以你不能在外键声明中引用它。

您需要在该列上添加唯一索引,或者您应创建引用 TAAK 表中两个主键列的外键。