Jag testade ditt bordskapande.
Sedan fick jag mer information om felet med den främmande nyckeln:
mysql> show engine innodb status\G
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2018-02-20 14:51:33 700002d90000 Error in foreign key constraint of table calls/called:
FOREIGN KEY (`Code`)
REFERENCES `calls`.`city` (`Code`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `Number`
FOREIGN KEY (`Number`)
REFERENCES `calls`.`subscriber` (`Number`)
ON DELETE CASCADE
ON UPDATE CASCADE):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
...
Jag ser problemet:du har en sammansatt primärnyckel i city
på kolumner (Name, Code)
. För detta måste du skapa en främmande nyckel-begränsning som refererar till båda kolumner i förälderns primärnyckel.
Så här:
CONSTRAINT `Name`
FOREIGN KEY (`Name`, `Code`)
REFERENCES `calls`.`city` (`Name`, `Code`)
ON DELETE CASCADE
ON UPDATE CASCADE
Deklarera inte en begränsning för varje kolumn – deklarera en begränsning som refererar till båda kolumnerna i nyckeln.