sqlite меня знатно затролил. Использовал rowid в качестве внешнего ключа, а он взял да и поменял rowid у записей (видимо он перестраивает этот ключ при удалении строк из таблицы). И ведь когда завязывался на rowid посмотрел в доках про него, мало-ли, может там какие подводные камни и лучше добавить нормальный ID, не заметил никаких предупреждений. Уже сейчас, когда знал куда смотреть, со второй попытки заметил
«If the rowid is not aliased by INTEGER PRIMARY KEY then it is not persistent and might change. In particular the VACUUM command will change rowids for tables that do not declare an INTEGER PRIMARY KEY. Therefore, applications should not normally access the rowid directly, but instead use an INTEGER PRIMARY KEY»
Среди прочих увлекательных фактов о формате хранения.
Вот слабо им было написать «DO NOT USE rowid as foreign key if it is not aliased by…», но блин нет, гораздо важнее было сообщить что движок хранения на самом деле не использует обычный первичный ключ как первичный ключ.
Неизвестное количество данных в базе превратилось в тыкву. А данные эти я вручную собирал пару недель
@MrClon Странно, с моей точки зрения это прямо вот из названия очевидно.