我收到错误说"无法删除或更新父行,外键约束失败。"当我试图更新团队表中的值时。我究竟做错了什么?
$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'";
答案 0 :(得分:0)
您需要重新考虑您的架构。
Team
和Division
似乎应该是两个具有自己ID的独立实体。
现在,根据您的商业模式,如果Participant
只能在一个Team
和一个Division
中,那么您只需在参与者中添加两个外键即可引用Team
和Division
分别。
如果Participant
可能多于Teams
和/或Divisions
,则需要引入一个概念性实体DivisionTeamParticipant
,该实体将包含多行外键Team
,Division
和Participant
。
编辑@paulF
如果您的层次结构严格应该是:Division
- > Team
- > Participant
。因此,您只需要Team
中的外键引用Division
,Participant
中的外键引用团队。