Я использовал MySQL Workbench для подготовки макета базы данных и экспортировал ее в свою базу данных с помощью phpMyAdmin. Глядя на одну таблицу, я получил следующее предупреждение:
Ключи PRIMARY и 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);
edit Я попытался удалить дополнительный индекс для gid
в phpMyAdmin, и, похоже, он работает. Каскадное действие по-прежнему происходит при изменении чего-либо в таблице групп, поэтому я предполагаю, что внешнее отношение не нарушается даже без индекса.
Но почему MySQL Workbench заставляет меня сохранять этот индекс? Я не могу удалить его вручную, пока есть внешний ключ.