Ошибка MySQL 1005: не удается создать таблицу (база данных lexeme)
Я разработал базу данных MySQL с 8 таблицами. Я написал SQL для генерации каждой таблицы с ее ключами и ограничениями. Но одна таблица всегда терпит неудачу при создании, и нет полезного сообщения об ошибке, которое дает подсказку о том, в чем проблема. Я описал свою базу данных на GitHub. Увеличьте диаграмму, чтобы понять, как все связано:
https://github.com/gustafl/Lexeme/wiki/Lexeme-data-model
А вот код для генерации первых 7 таблиц:
CREATE TABLE `grammatical_category` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `grammeme` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`grammatical_category` tinyint(3) unsigned NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `grammatical_category_fk_idx` (`grammatical_category`),
CONSTRAINT `grammeme_grammatical_category_fk` FOREIGN KEY (`grammatical_category`) REFERENCES `grammatical_category` (`id`)
);
CREATE TABLE `lexical_category` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `language` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`code` varchar(5) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code_idx` (`code`)
);
CREATE TABLE `lexeme` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`language` tinyint(3) unsigned NOT NULL,
`lexical_category` tinyint(3) unsigned NOT NULL,
`spelling` varchar(100) NOT NULL,
`pronounciation` varchar(100),
PRIMARY KEY (`id`),
KEY `language_fk_idx` (`language`),
KEY `lexical_category_fk_idx` (`lexical_category`),
CONSTRAINT `lexeme_language_fk` FOREIGN KEY (`language`) REFERENCES `language` (`id`),
CONSTRAINT `lexeme_lexical_category_fk` FOREIGN KEY (`lexical_category`) REFERENCES `lexical_category` (`id`)
);
CREATE TABLE `inflection` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`lexeme` int(10) unsigned NOT NULL,
`spelling` varchar(100) NOT NULL,
`pronounciation` varchar(100),
PRIMARY KEY (`id`),
KEY `lexeme_fk_idx` (`lexeme`),
CONSTRAINT `inflection_lexeme_fk` FOREIGN KEY (`lexeme`) REFERENCES `lexeme` (`id`)
);
CREATE TABLE `inflection_grammatical_category` (
`inflection` int(10) unsigned NOT NULL,
`grammatical_category` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`inflection`,`grammatical_category`),
KEY `inflection_fk_idx` (`inflection`),
KEY `grammatical_category_fk_idx` (`grammatical_category`),
CONSTRAINT `inflection_grammatical_category_grammatical_category_fk` FOREIGN KEY (`grammatical_category`) REFERENCES `grammatical_category` (`id`),
CONSTRAINT `inflection_grammatical_category_inflection_fk` FOREIGN KEY (`inflection`) REFERENCES `inflection` (`id`)
);
Вот последняя таблица, которая терпит неудачу:
CREATE TABLE `lexeme_grammatical_category` (
`lexeme` int(10) unsigned NOT NULL,
`grammatical_category` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`lexeme`,`grammatical_category`),
KEY `lexeme_fk_idx` (`lexeme`),
KEY `grammatical_category_fk_idx` (`grammatical_category`),
CONSTRAINT `lexeme_grammatical_category_grammatical_category_fk` FOREIGN KEY (`grammatical_category`) REFERENCES `grammatical_category` (`id`),
CONSTRAINT `lexeme_grammatical_category_lexeme_fk` FOREIGN KEY (`lexeme`) REFERENCES `lexeme` (`id`)
);
Таблица lexeme_grammatic_category идентична таблице inflection_grammatic_category, за исключением того, что слово "inflection" везде заменяется словом "lexeme ". Я сделал поиск и замену, чтобы быть уверенным. Я также пытался создать lexeme_grammatic_category до inflection_grammatic_category, но все равно не получается.
Я просто не вижу, что не так. Я подумал, что это может быть проблема круговой ссылки, потому что лексема и перегиб тоже связаны. Но lexeme_grammatic_category завершается ошибкой, прежде чем я создаю inflection_grammatic_category, поэтому я не вижу, как это сделать.