Я использовал MySQL Workbench для подготовки макета базы данных и экспортировал его в мою базу данных с помощью phpMyAdmin. При взгляде на одну таблице, я получил следующее предупреждение:Ключи PRIMARY и INDEX для одного столбца FOREIGN в MySQL
ПЕРВИЧНЫХ и INDEX ключи не должны быть заданы для столбца
gid
gid
является иностранным индексом, который является первичным ключом другой таблицы , и который также является частью первичного ключа текущей таблицы. Поэтому я имею это как часть первичного ключа, а Workbench создал индекс для ввода внешнего ключа. Итак, почему это предупреждение появляется, следует ли игнорировать его или пересмотреть мой макет базы данных?
Это очень упрощенный пример используемой структуры, которая производит предупреждение:
CREATE TABLE IF NOT EXISTS `test_groups` (
`gid` INT NOT NULL ,
`gname` VARCHAR(45) NULL ,
PRIMARY KEY (`gid`));
CREATE TABLE IF NOT EXISTS `test_users` (
`gid` INT NOT NULL ,
`uid` INT NOT NULL ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`gid`, `uid`) ,
INDEX `gid` (`gid` ASC) ,
CONSTRAINT `gid`
FOREIGN KEY (`gid`)
REFERENCES `test_groups` (`gid`)
ON DELETE CASCADE
ON UPDATE CASCADE);
редактировать Я попытался удалить дополнительный индекс для gid
в PhpMyAdmin и, кажется, работает. Каскадное действие по-прежнему происходит при изменении чего-либо в таблице групп, поэтому я полагаю, что внешнее отношение не повреждено даже без индекса.
Но почему MySQL Workbench заставляет меня поддерживать этот индекс? Я не могу вручную удалить его там, пока есть внешний ключ.
Эта ошибка неправильно помечена как дубликат некоторой другой исправленной ошибки. [Это актуальная ошибка.] (Http://bugs.mysql.com/bug.php?id=53277) – phazei