Вы можете создать дополнительную таблицу, которая будет содержать информацию о подписке на дайджесты каждого пользователя.Этот способ дает возможность сделать дизайн базы данных более чистым и универсальным, поскольку рассылка является отдельным логическим модулем.Кроме того, дополнительная таблица дает возможность легко расширять хранимые данные о подписке на дайджест в будущем.Например:
С помощью этой таблицы вы легко сможете управлять данными.Например, вы можете выбрать всех получателей ежедневного дайджеста:
SELECT *
FROM digest_subscription
WHERE interval_type = 'daily'
AND last_date_distribution <= NOW()
или выбрать всех получателей еженедельного дайджеста
SELECT *
FROM digest_subscription
WHERE interval_type = 'weekly'
AND last_date_distribution <= NOW() - INTERVAL 7 DAY
Условие по типу интервала и сравнить распределение последних дат по правилу«равно или меньше» дают возможность избежать проблем несвоевременной отправки электронных писем (например, технические сбои на сервере и т. д.)
Кроме того, вы можете составить правильный список статей с помощью информации о последнем распространении данных,Использование последнего распределения данных дает возможность избежать проблем изменения интервала.Например:
SELECT *
FROM articles
WHERE created_at >= <the last date distribution of the user>
Конечно, вы не избежите проблем с обновленной датой создания.Но вы должны минимизировать причины этого.Например, ваш код может обновлять дату модификации, но ваш код не должен изменять дату создания.