Ошибка 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, поэтому я не вижу, как это сделать.

0 ответов

Другие вопросы по тегам