Нарушение ссылочной целостности
У меня есть база данных, которая как-то повреждена следующим образом:
Запись в таблице A имеет значение в столбце внешнего ключа, указывающее на таблицу B, но в B. такой записи не существует.
БД была создана в h2 версии 1.3.152, и я восстановил ее с помощью 1.3.170 (последняя на момент публикации).
Также странно, что инструмент восстановления не жаловался на это (но проблема не была решена)
Есть идеи, почему / как это произошло?
Есть идеи как восстановить?
Актуальный пример:
выберите * из punto, где punto_id = 3309; -> ничего не возвращает
выберите * из tramo, где caseta_punto_id = 3309; -> возвращает 1 запись
punto.punto_id ссылки tramo.caseta_punto_id
Вы можете скачать копию базы данных здесь.
Благодарю.
1 ответ
База данных была фактически создана с H2 версии 1.2.140 с 2010 года. (Параметр CREATE_BUILD в файле базы данных равен 140, что означает, что используется версия 1.2.140.)
Трудно сказать, как нарушалась ссылочная целостность. Проблема могла возникнуть, когда база данных была повреждена, или это могло произойти, когда ссылочная целостность была отключена (если она вообще была отключена).
Инструмент восстановления предназначен для восстановления как можно большего количества данных в файле базы данных. Это не устраняет проблемы ссылочной целостности.
Есть несколько способов исправить проблемы ссылочной целостности. Одним из решений является удаление лишних записей, другим является добавление отсутствующих записей. Однако в настоящее время у меня нет автоматического способа их исправить.