我正在尝试使用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给出了以下错误消息:
找不到主表的引用字段的唯一索引
有人能帮助我吗?我被困了
答案 0 :(得分:1)
Taak
上的主键由两列组成:
constraint pk_taak primary key (Taaknr, ProjID)
您的约束仅引用其中一个。
您还需要ProjID
:
约束fk_assignment_taak 外键(Taaknr,ProjID)引用Taak(Taaknr,ProjID)
答案 1 :(得分:1)
错误消息非常清楚地指出了问题。
表 TAAK 中的 Taaknr 列是主键的一部分,但并不强制它本身是唯一的。所以你不能在外键声明中引用它。
您需要在该列上添加唯一索引,或者您应创建引用 TAAK 表中两个主键列的外键。