私はこのスキーマをいじって、あなたが何をしようとしているのかを確認しました:
CREATE TABLE `events` (
`event_id` int(11) NOT NULL AUTO_INCREMENT,
`event_name` varchar(255) NOT NULL,
PRIMARY KEY (`event_id`),
UNIQUE KEY `event_name_UNIQUE` (`event_name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `person` (
`person_id` int(11) NOT NULL AUTO_INCREMENT,
`person_name` varchar(225) DEFAULT NULL,
PRIMARY KEY (`person_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `pe` (
`event_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
PRIMARY KEY (`event_id`,`person_id`),
KEY `fk_events_has_person_person1` (`person_id`),
KEY `fk_events_has_person_events` (`event_id`),
CONSTRAINT `fk_events_has_person_events` FOREIGN KEY (`event_id`) REFERENCES `events` (`event_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_events_has_person_person1` FOREIGN KEY (`person_id`) REFERENCES `person` (`person_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
UNIQUE プロパティを配置する場所に混乱があると思います。各イベントと人物は一意である必要があります。これは、それぞれのテーブルの主キーによって保証されます。また、たとえば person_name のような列に UNIQUE 制約を追加して、実際の値が一意であることを確認することもできます。外部キーに問題はありませんでした。問題は、暫定テーブルの各フィールドに UNIQUE 制約を追加したことです。それは間違いです。暫定テーブルの各行が一意であることを確認したい場合は、複合主キーを追加するか、JW が複合 UNIQUE 制約を提案したように追加する必要があります。