2015-12-02 80 views
-2

我收到一条错误消息,提示“无法删除或更新父行,外键约束失败。”当我试图更新团队表中的值时。我究竟做错了什么?无法删除或更新父行,外键约束失败

$createTeam ="CREATE TABLE Team(
    teamName VARCHAR(30) not null, 
    division VARCHAR(30) not null, 
    photo VARCHAR(30), 
    primary key(teamName, division) 
    ) 
    engine=innodb"; 


$createParticipant ="CREATE TABLE Participant(
    participantName VARCHAR(30) not null, 
    techniqueResult DOUBLE(10,2), 
    trickResult INT(10), 
    teamName VARCHAR(30) not null, 
    division VARCHAR(30) not null, 
    primary key (participantName), 
    foreign key (teamName, division) references Team(teamName, division) 
    ON DELETE CASCADE 
    ) 
    engine=innodb"; 




$updateTeam = "UPDATE Team SET teamName = '$newTeamName' , division = '$newDivision' WHERE teamName = '$oldTeamName' AND division ='$oldDivision'"; 
+1

您正在更改Team表中的主键值(即teamName,division),而Participant表中的记录具有该值作为外键。 – PaulF

回答

0

您需要重新考虑您的模式。

TeamDivision好像他们应该是两个独立的实体和他们自己的ID。

现在根据你的商业模式,如果Participant只能在一个Team和一个Division那么你只需在参与者加入两个外键分别引用TeamDivision

如果Participant可以在一个以上的Teams和/或Divisions您需要引入一个概念实体DivisionTeamParticipant,它包含TeamDivisionParticipant外键的多行。

编辑@paulF

如果您的层次结构是严格的比它应该是:Division - >Team - >Participant。所以你只需要Team中的一个外键来引用Division,而另一个在Participant中引用Team。

+1

或者它可能是参与者在一个分部的团队中,所以参与者有一个与团队相关的外键,并且团队有一个与该分部有关的外键。 – PaulF

相关问题