Вы должны понимать разницу между «ключом приложения» и «техническим ключом».
Технический ключ существует с единственной целью сделать предмет уникальным. Обычно он генерируется в INTEGER или BIGINT (идентичность, что угодно). Этот ключ используется для поиска объектов в базе данных, быстрого определения того, что объект уже сохранен (идентификаторы должны быть> 0, поэтому объект с идентификатором по умолчанию == 0 еще не находится в БД) и т. Д.
Ключ приложения - это то, что вам необходимо для понимания объекта в контексте вашего приложения. В данном случае это порядок фотографий в галерее. Это не имеет никакого значения для базы данных.
Подумайте упорядоченный список: это значение по умолчанию в большинстве языков. У вас есть набор элементов, доступ к которым осуществляется по индексу. Для базы данных этот индекс является ключом приложения, поскольку наборы в базе данных неупорядочены (или, скорее, база данных не гарантирует какого-либо упорядочения, если вы не укажете ORDER BY). По той же причине пролистывание результатов запроса является такой болью: базам данных действительно не нравится идея «позиции».
Итак, что вы должны сделать, это добавить строку индекса (т. Е. INTEGER, который говорит, в какой позиции в галерее находится ваше изображение; не индекс базы данных для более быстрого доступа, даже если вы должны создать индекс для этого столбца ... ) и поддерживать это. Для каждой вставки необходимо UPDATE index = index + 1 where index >= insertion_point
и т. Д.
Да, это отстой. Единственное известное мне решение: используйте платформу ORM, которая решит это за вас.