興味と製品を表す 2 つのテーブルがあります。それらの間に many_many 関係を実装しています。テーブルを作成したとき、製品または関心のレコードが削除された場合に割り当てテーブルのレコードが削除されるように、テーブルの制約を作成するのを怠りました。
関心表
CREATE TABLE IF NOT EXISTS `interests` (
`id` int(11) NOT NULL auto_increment,
`interest` varchar(255) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=62 ;
製品表
CREATE TABLE IF NOT EXISTS `products` (
`id` int(11) NOT NULL auto_increment,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=65 ;
割り当て表
CREATE TABLE IF NOT EXISTS `interest_product_assignment` (
`id` int(11) NOT NULL auto_increment,
`interest_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `product` (`product_id`),
KEY `interest` (`interest_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
この制約を追加しようとして失敗したようです-
ALTER TABLE `interest_product_assignment` ADD CONSTRAINT `product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE `interest_product_assignment` ADD CONSTRAINT `interest` FOREIGN KEY (`interest_id`) REFERENCES `interest` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
製品レコードを削除しても、対応する割り当てレコードが削除されません。
これに関するいくつかの質問:
- これは、この種の制約の正しい構文ですか?
- テーブルの作成時にこれらの制約を追加していないこと、またはテーブルに既にデータを取得していることは問題ですか?
- 制約が正常に追加されたかどうかは、PHPMyADMIN のどこで確認できますか? それらへの参照がどこにも見つからないようで、PHPMyADMIN がエラー メッセージをスローせずに制約を無視したと思うようになりました。