2015-12-02 79 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

相關問題