Я думаю, что наиболее естественный дизайн в SQL - это отдельная таблица:
create table userImages (
userImageId serial,
userId int references users(userId),
image varchar(255),
position int
);
Как вы заметили, если вы хотите, чтобы позиции были без зазоров и упорядочены, то вам нужно обновить все строки.
Это имеет несколько особенностей / преимуществ:
- Вы можете поместить логику в триггер или хранимую процедуру, чтобы она находилась в базе данных.
- Вы можете добавить дополнительныеинформация об изображениях, например дата их добавления или мягкое удаление.
- База данных может предотвращать дублирование изображений.
Альтернативой может быть сохранение их в виде массива встрока в users
.Чтобы сохранить порядок, вам нужно сделать это в приложении.То есть считайте массив, удалите, вставьте и измените порядок, а затем снова сохраните строку.
Это имеет несколько особенностей / недостатков, таких как:
- Приложение имеетотвечать за столбец, а не за базу данных.
- Нет места для размещения дополнительной информации об изображениях.
Обычно я склонен к первому подходу, но естьнекоторые ситуации, когда второе вполне разумно.