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