Я работаю над веб-приложением Rails с базой данных MySQL. Я использую миграции для изменения схемы. Я только что столкнулся с проблемой, из-за которой при вставке новой записи я получаю ошибку неверной записи. Соответствующие таблицы:
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
, но как есть, для меня это не имеет смысла.