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