Я бы также использовал вторую таблицу user_settings_history
.
Когда параметр создан, ВСТАВЬТЕ его в таблицу user_settings_history
вместе с отметкой времени его создания.Затем также ОБНОВИТЕ те же настройки в таблице user_settings
.В user_settings
для каждого пользователя будет одна строка, и это всегда будут текущие настройки.
Так что user_settings
всегда будет иметь текущие настройки, а таблица истории будет иметь все предыдущие наборы настроек., связанный с датой их создания.
Это упрощает ваши запросы к таблице user_settings
.Вам не нужно изменять запросы для фильтрации по столбцу флага current
, который вы описали.Вы просто знаете, что, как работает ваше приложение, значения в user_settings
определяются как текущие.
Если вы обеспокоены тем, что таблица user_settings_history
становится слишком большой, столбец отметки времени позволяет довольно легкоПериодически УДАЛЯЙТЕ строки старше 180 дней, или любое другое количество дней, которое вам кажется подходящим.
Кстати, 5 миллионов строк не так велики для базы данных MySQL.Вы бы хотели, чтобы ваши запросы использовали индекс там, где это необходимо, но один только размер не является недостатком.