Прежде всего, позвольте мне сказать, что я использую PHP-фреймворк Yii, поэтому я хотел бы остаться в пределах его определенного набора операторов SQL, если это возможно. Я знаю, что мог бы, вероятно, создать один огромный длинный SQL-оператор, который бы делал все, но я бы предпочел не идти туда.
ОК, представьте, что у меня есть таблица Users и таблица FavColors. Затем у меня есть форма, в которой пользователи могут выбирать свои цветовые предпочтения, установив один или несколько флажков в большом списке возможных цветов.
Эти результаты хранятся в виде нескольких строк в таблице FavColors следующим образом (id, user_id, color_id).
Теперь представьте, что пользователь заходит и меняет свои цветовые предпочтения. В этом сценарии, какой будет наиболее эффективный способ получить новые цветовые предпочтения в базе данных?
Вариант 1:
- Массовое удаление всех строк, в которых указан user_id
- Затем выполните массовую вставку всех новых строк
Вариант 2:
- Просмотрите каждую текущую строку, чтобы увидеть, что изменилось, и обновите соответственно
- Если нужно вставить больше строк, сделайте это.
- Если необходимо удалить строки, сделайте это.
Мне нравится первый вариант, потому что он требует только двух операторов, но что-то не так, когда вы удаляете строку, чтобы потенциально вернуть почти те же самые данные. Существует также проблема автоматического увеличения идентификаторов до более высоких значений. быстро, и я не знаю, следует ли этого избегать, когда это возможно.
Вариант 2 потребует гораздо больше работы по программированию, но предотвратит ситуации, когда я удаляю строку, просто чтобы создать ее снова. Однако добавление дополнительной нагрузки в PHP может не стоить уменьшения нагрузки для MySQL.
Есть мысли? Что бы вы все сделали?