По сути, второе решение, которое вы предлагаете, - это связанный список. Связанные списки, реализованные на уровне базы данных, обычно не очень хорошая идея. Чтобы получить список n
элементов, вам потребуется n
доступ к базе данных (или использование сложных запросов). С точки зрения производительности извлечение списка в O (n) ужасно неэффективно.
В обычном коде связанный список используется для повышения производительности вставки по сравнению с массивами (нет необходимости перемещать все элементы вокруг). В вашей базе данных обновление всех элементов не так сложно, всего за 2 запроса:
UPDATE item.order = item.order + 1 FROM item WHERE order > 3
INSERT INTO item (order, ...) VALUES (3, ...)
Я помню, что видел приложение многократного использования, которое реализовало все это и хороший интерфейс администратора, но я не могу найти его прямо сейчас ...
Подводя итог, определенно используйте решение № 1 и держитесь подальше от решения № 2, если у вас нет очень веских причин не делать этого!