Дизайн базы данных для хранения заказанных фотографий пользователя? - PullRequest
0 голосов
/ 20 октября 2018

Например,

пользователь имеет [image1.jpg, image2.jpg ,image3.jpg]

пользователь может изменить их порядок на [image2.jpg, image1.jpg, image3.jpg], добавить в конец, удалить из любой позиции

Я могу подуматьиз 2 способов их хранения:

  1. просто сохранить как Array тип в базе данных.когда пользователь добавляет / удаляет / переупорядочивает фотографии, перезаписывает весь массив в базе данных
  2. сохраняет множество строк фотографий, причем столбец position принадлежит 1 пользователю.при вставке добавить в последнюю позицию + 1. при удалении необходимо сместить позиции после удаленных позиций назад - 1

Какой дизайн рекомендуется?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Я думаю, что наиболее естественный дизайн в SQL - это отдельная таблица:

create table userImages (
    userImageId serial,
    userId int references users(userId),
    image varchar(255),
    position int
);

Как вы заметили, если вы хотите, чтобы позиции были без зазоров и упорядочены, то вам нужно обновить все строки.

Это имеет несколько особенностей / преимуществ:

  • Вы можете поместить логику в триггер или хранимую процедуру, чтобы она находилась в базе данных.
  • Вы можете добавить дополнительныеинформация об изображениях, например дата их добавления или мягкое удаление.
  • База данных может предотвращать дублирование изображений.

Альтернативой может быть сохранение их в виде массива встрока в users.Чтобы сохранить порядок, вам нужно сделать это в приложении.То есть считайте массив, удалите, вставьте и измените порядок, а затем снова сохраните строку.

Это имеет несколько особенностей / недостатков, таких как:

  • Приложение имеетотвечать за столбец, а не за базу данных.
  • Нет места для размещения дополнительной информации об изображениях.

Обычно я склонен к первому подходу, но естьнекоторые ситуации, когда второе вполне разумно.

0 голосов
/ 20 октября 2018

Что я думаю.если фотография упорядочена по некоторому атрибуту (например, время последнего редактирования), вы просто выбираете XXX порядок по атрибуту.если фотография, заказанная пользователем, требует, мы должны использовать столбец 'position'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...