事件
MySQLで外部キーを張ろうとした時、このようなエラーが出た。
[HY000][150] Create table '***' with foreign key constraint failed. There is no index in the referenced table where the referenced columns appear as the first columns.
捜査
メッセージの内容に、どうにも納得がいかない。参照先にインデックスは存在している。
いろいろググってみて、このエラーメッセージが必ずしも適切でないことを疑った。

[MySQL] 外部キー制約作成時、ERROR 1005 (HY000): Can't create table - Qiita
概要
外部キー制約を付けたテーブル作成時、以下のエラーが発生した
ERROR 1005 (HY000): Can't create table 'table_name' (errno: 150)
このメッセージがあまり親切...
解決
テーブルの詳細を確認した。
select * from information_schema.tables;
select * from information_schema.columns;
あ!
参照元と参照先のカラムのCHARACTER_SET_NAMEが異なっていた。(片方はutf8mb4で、もう片方がutf8だった。)
犯人はお前だ!
関連するテーブルの外部キーを一旦削除し、対象のテーブルをutf8mb4に統一する。
ALTER TABLE {テーブル名} CONVERT TO CHARACTER SET utf8mb4;
その後に外部キーを作り直して解決した。