Jak uvádí dokumentace MySQL na cizí klíče :
Pokud tedy používáte innodb, pak vám MySQL neumožňuje vytvořit cizí klíč v poli, které není polem úplně vlevo v indexu.
Důvodem je, že ve vícesloupcovém indexu nemůžete vyhledat hodnotu na základě pole, které není úplně vlevo, takže index nelze použít k rychlému vyhledání hodnoty pro kontrolu cizího klíče.
Toto chování indexů MySQL je popsáno v dokumentaci MySQL na vícesloupcové indexy :