Oficiálně nemáte žádnou kontrolu nad pořadím kaskádových operací. Možná budete moci zneužít některé nedokumentované chování však:
- u MySQL 5.5 se cizí klíče spouštějí v pořadí, v jakém byly vytvořeny, takže vypuštění a opětovné vytvoření
fk_category_org
-omezení by mělo fungovat - pro MySQL 5.6+ se cizí klíče spouštějí v lexikálním pořadí jejich jmen, takže přejmenování
fk_category_org
k např.fk_z_category_org
by měl fungovat
Toto není zdokumentováno a může se kdykoli změnit (a může být ovlivněno jinými faktory).
Jak již bylo řečeno, správný způsob, jak to udělat (a cokoli jiného příliš komplikovaného pro on cascade
) by bylo přidat before delete
-spouštěč
ve vaší organisation
-tabulka, která "ručně" nejprve odstraní uživatele a poté kategorie. before delete
-triggery se spouštějí před on cascade
(takže se můžete rozhodnout, zda si je chcete ponechat nebo ne, i když by to pravděpodobně bylo zavádějící).
Není zcela jasné, zda je to vaše zamýšlené chování, ale v současné době může mít uživatel kategorii, která patří do organizace 1, zatímco je přiřazen k organizaci 2. Smazání organizace 1 by pak stále selhalo. Trochu to vypadá, že právě tomu chcete svým návrhem zabránit, ale pokud chcete, aby mazání fungovalo i v tomto případě, potřebujete chcete-li použít spouštěč k tomu, abyste jej mohli začlenit (nebo jej ručně odstranit ve vaší aplikaci), kaskádování nebude fungovat, pokud nezařadíte také tabulku kategorií.