Я не уверен, почему они должны быть уникальными, но из чтения форумов MySQL выясняется, что это так. Тем не менее, я думаю, что это как-то связано с именем INDEX. У меня есть две таблицы, которые имеют ограничения внешнего ключа, ссылающиеся на один и тот же первичный ключ в третьей таблице. Если это помогает, я использую MySQL для разработки схемы.
Я обычно называю свой внешний ключ в каждой таблице тем же именем, что и первичный ключ, на который она ссылается. Я думаю, это невозможно. Он создаст первую таблицу с ограничением внешнего ключа, но когда он попытается создать вторую таблицу, он выдаст ошибку. Вот вторая таблица, в которой выдается ошибка:
CREATE TABLE IF NOT EXISTS `joe`.`products_to_categories` (
`product_to_category_id` INT NOT NULL AUTO_INCREMENT ,
`category_id` INT NOT NULL ,
`product_id` INT NOT NULL ,
PRIMARY KEY (`product_to_category_id`) ,
INDEX `category_id` (`category_id` ASC) ,
INDEX `product_id` (`product_id` ASC) ,
CONSTRAINT `category_id`
FOREIGN KEY (`category_id` )
REFERENCES `joe`.`categories` (`category_id` )
ON DELETE CASCADE
ON UPDATE NO ACTION,
CONSTRAINT `product_id`
FOREIGN KEY (`product_id` )
REFERENCES `joe`.`products` (`product_id` )
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Я хочу, чтобы имена внешних ключей совпадали с первичными ключами в обеих других таблицах. Что я должен удалить здесь, чтобы я мог использовать эти имена. Какова лучшая практика здесь.