これはおそらく知識不足か単なる愚かさによるものですが、相互参照テーブルで外部キーを作成する方法を理解したいと思います。
たとえば、item と image の 2 つのテーブルがあります。
CREATE TABLE `item` (
`id` INT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`description` MEDIUMTEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `image` (
`id` INT(11) UNSIGNED AUTO_INCREMENT,
`file` VARCHAR(255) UNIQUE NOT NULL,
`caption` VARCHAR(255),
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
任意の画像を任意のアイテムに参照したいので、次のような相互参照表を作成します。
CREATE TABLE `item_image` (
`item` INT(11) UNSIGNED NOT NULL,#foreign key
`img` INT(11) UNSIGNED NOT NULL,#foreign key
PRIMARY KEY(`item`,`img`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
しかし、item_image テーブルには外部キーである列が含まれているので、このように制約しようとします。
CREATE TABLE `item_image` (
`item` INT(11) UNSIGNED NOT NULL,
`img` INT(11) UNSIGNED NOT NULL,
PRIMARY KEY(`item`,`img`),
FOREIGN KEY(`item`)
REFERENCES `item` (`id`)
ON DELETE CASCADE,
FOREIGN KEY(`img`)
REFERENCES `image` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
そのため、画像またはアイテムが削除された場合、データベースは相互参照も削除します。
私は Web と stackoverflow で多くのリソースを読みましたが、多くのテーブルに対して 1 つのテーブルで複数の外部キーを定義することで、やりたいことを実行するのに問題はないはずだとよく言われ ます。
しかし、MySQLは私にこの一般的なエラーを与えます
エラー コード: 1005。テーブル 'test.item_image' を作成できません (errno: 150)
MySQL が不平を言っていることを正確に理解するには、助けが必要です。
編集:
問題があれば、MySQL Workbench 5.2.39 CE でクエリを実行します...
MySQL バージョン: 5.5.16