То, что я сделал в тот раз, когда мне пришлось это сделать, - это какая-то запись «заголовка», в которой сохранялись идентификаторы всех «элементов» в порядке, разделенных запятыми ...
Итак, в вашем случае я бы сохранил 1,2,3 в первой версии и 3,1,2 во второй.
Это абсолютно не нормализуется и выглядит ужасно, но:
- Когда пользователь меняет порядок, вы обновляете только ОДНУ строку. Это было важно, наши списки могли стать большими.
- Когда пользователь добавляет элемент, этот элемент естественным образом попадает в начало или конец списка, в зависимости от того, как вы извлекаете элементы, чтобы показать их.
Когда вы хотите показать список, вы читаете элементы и помещаете их в хеш-таблицу, упорядоченную по их идентификатору.
Затем вы читаете строку, которая устанавливает порядок, разделяете ее запятыми, и для каждого идентификатора вы находите соответствующий элемент в своей хеш-таблице и добавляете его в «список» или «коллекцию».
Затем, если у вас есть элементы в вашей хеш-таблице, вы добавляете их в список в начале или в конце, в зависимости от того, где вы хотите, чтобы появлялись новые вещи.
Только мои 2 цента