我使用MySQL Workbench准备数据库布局,并使用phpMyAdmin将其导出到我的数据库中。在查看一个表时,我收到了以下警告:
PRIMARY和INDEX键不应同时设置为列gid。
gid是不同表的主键的外部索引,也是当前表的主键的一部分。因此,我将其作为主键的一部分,并且Workbench为外键条目创建了索引。那么为什么会出现这个警告?我应该忽略它还是应该重新考虑我的数据库布局?
这是使用的结构的一个非常简化的示例,它会产生警告:
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);
编辑 我尝试在phpMyAdmin中删除gid
的额外索引,看起来它可以工作。当更改组表中的内容时,级联操作仍然发生,因此我想即使没有索引,外键关系也是完整的。
但是为什么MySQL Workbench强制我保留该索引?只要有外键存在,我就无法手动删除它。