Я работаю над веб-приложением Rails с базой данных MySQL. Я использую миграции для изменения схемы. Я просто столкнулся с проблемой, когда у меня ошибка с ошибкой при вставке новой записи. Соответствующие таблицы:Что это за ограничение «_ifbk» в моей таблице?
users
id | name | email | ...
academic_records
id | scholar_id | gpa | ...
academic_records.scholar_id
является внешним ключом ссылкой на users.id
, но я не размещали какие-либо другие ограничения в этой таблице. Ошибка выглядит следующим образом:
Mysql::Error: Cannot add or update a child row: a foreign key constraint fails
(`my_db`.`academic_records`, CONSTRAINT `academic_records_ibfk_1`
FOREIGN KEY (`id`) REFERENCES `academic_records` (`id`) ON DELETE CASCADE): ...
Я открыл базу данных MySQL с помощью Sequel Pro и нашел это ограничение:
CREATE TABLE `academic_records` (
`gpa` varchar(10) DEFAULT NULL,
...
PRIMARY KEY (`id`),
KEY `index_academic_records_on_scholar_id` (`scholar_id`),
CONSTRAINT `academic_records_ibfk_1` FOREIGN KEY (`id`)
REFERENCES `academic_records` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=177 DEFAULT CHARSET=utf8;
Я понятия не имею, как он получил там или что он делает. Почему таблица должна иметь внешний ключ от своего собственного идентификатора? Можно ли удалить ограничение? Если да, то как? Я мог понять, почему я хотел бы каскадировать удаления от users.id
до academic_records.scholar_id
, но, как есть, для меня это не имеет смысла.
После некоторого осмотра я нашел одинаково названные ограничения на других таблицах, но они имели разумное внешний ключ отношения - - такие вещи, как удаление сообщений пользователем при удалении пользователя. –