Ryan
@Ryan
HTML, CSS, JS, PHP разработчик

Редактирование мультикатегории?

Добрый день, интересует тонкий вопрос реализации. Стандартная ситуация, есть три таблицы: news, cat и связующая таблица newscat, которая служит для хранения связей выбранных категорий каждой отдельной новости, на простом языке - мультикатегории, то есть возможность выбора нескольких категории у новости. Тут все понятно и правильно со стороны нормализации бд. Интересует алгоритм редактирования этих связей, на данный момент у меня реализовано просто, но на мой взгляд не очень лаконично. При отправке формы с параметрами категорий я попросту сначала удаляю все записи в таблице связей которая относится к редактируемой новости и создаю новые, чтобы не проверять наличие и отсутствие. Вопрос: правильно ли это и какую реализацию используете вы? Что то в подсознании мне не дает покоя от своего алгоритма, конечно он выполняет свою работу, но как то топорно. Возможно есть вариант на чистом SQL который проверяет и при необходимости удаляет или добавляет записи связей в зависимости от выбранных категорий. Буду очень признателен за помощь!
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
Тут же вопрос в результате. Надо сохранить выбранные категории при условии, что уже какие то сохранены. Удалить все сохраненные и добавить выбранные это один алгоритм со своими минусами, но он тривиален по кодированию. Можно более сложный алгортим запилить: выбрать сохраненые, взять те которые выбраны и составить два списка из этого - один на удаление, другой на добавление.
Если система разрабатывается лучше написать TODO и оставить как есть, а когда в продакшен пойдет оптимизировать код.
В целом более сложный алгортим даст более эффективное использование памяти таблицы, но я не думаю, что категории будут менятся часто. Это условно постоянные данные, так что можно оставить текущий алгортим.
Ответ написан
Комментировать
glebovgin
@glebovgin
Full Stack Web Developer
Добрый день.

Я этим вопросом тоже когда-то задавался и меня так же смущал вариант удаления всех связок и записи новых, хоть он и является довольно простым и понятным. Меня больше всего смущало "расходование" автоинкрементного поля в этом вопросе, хоть и нет, скорее всего, каких-то технически-верных обоснований для беспокойства об этом.
Я поступил следующим образом.
При сохранении брал из таблицы связей имеющиеся данные о категориях (при первом создании их нет, конечно же, при редактировании уже есть).
Если категория для новости уже была - не делаем ничего.
Если категория была и ее не стало - удаляем запись из таблицы связок (newscat в вашем случае)
Если категории не было - добавляем запись в таблицу связок.

Операции редкие, так что нагрузки лишней эти delete не дают, да и они к тому же единичные получаются. Автоинкремент по чем зря не расходуется (если он есть). Лично я выбрал именно такой вариант.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы