SQLite - перенос связанных данных, как избежать жестко закодированных первичных ключей - PullRequest
0 голосов
/ 26 января 2020

Я пишу SQL миграцию для БД SQLite, и у меня есть связанные таблицы, поэтому мне нужно сначала вставить строку таблицы 'root', а затем вставить строки 'children', которые будут использовать ID для 'root ' строка.

Один из вариантов может заключаться в том, чтобы жестко закодировать первичный ключ строки 'root' и использовать его позже во всех зависимых строках, но я не люблю рисковать ошибками 'duplicate ID'.

Я знаю, что в SQLite есть 'last_insert_rowid', и я могу использовать временную таблицу, чтобы сохранить это значение для следующих вставок, но все же, возможно, мне не хватает более оптимального способа сделать это.

Например, я иметь таблицы:

  • Plant (id)
  • PlantDescription (id, language_id, plant_id, desctiption)
  • PlantLink (id, language_id, plant_id, link)

и мне нужны следующие вставки:

INSERT INTO Plant VALUES (123);
INSERT INTO PlantDescription VALUES (1, 1, 123, 'some description');
INSERT INTO PlantLink VALUES (1, 1, 123, 'http://eng-link.com');

Здесь, чтобы вставить PlantDescription и PlantLink, мне нужно знать первичный идентификатор ранее вставленного Plant.

Я ищу за лучшую практику для достижения этого. Я занимаюсь разработкой Android приложения и использую Android Room, но, вероятно, вопрос более общий, и любое решение SQLite должно подойти.

...