Я не уверен, почему они должны быть уникальными, но, читая форумы MySQL, кажется, что они это делают. Однако, я думаю, что это имеет больше общего с именем INDEX. У меня есть две таблицы с ограничениями внешнего ключа, ссылающиеся на один и тот же первичный ключ на третьей таблице. Если это помогает, я использую workbench 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;
Я хочу, чтобы иностранные имена ключей, чтобы быть таким же, как первичный ключ в два других таблицах. Что я должен удалить здесь, чтобы использовать эти имена. Какая здесь самая лучшая практика.
Я не помню точно !! Я столкнулся с этой проблемой, для этого требуется уникальное имя ограничения, даже если ограничение относится к разной схеме/db на одном компьютере/установке –
Конечно, вы можете создавать уникальные имена, однако это больше подвержено ошибкам, чем просто позволяет MySQL находить уникальное имя. См. этот URL: http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign -key-constraints.html «Если указано предложение символа CONSTRAINT, значение символа должно быть уникальным в базе данных. Если предложение не указано, InnoDB автоматически создает имя. " –