Есть задача, к примеру пользователь покупает услугу на определенное время. Например на день может выделить объявление ярким цветом.
У нас есть множество вариантов решения данной задачи. Однако спор с моим коллегой остановился на 2 вариантах. Весь вопрос заключается как лучше всего сделать выборку к примеру всех выделенных объявлений или узнать, выделено ли вообще объявление.
Вариант 1:
У нас есть 2 таблицы, 1 таблица истории покупок услуг и 2 таблица самих объявлений.
Когда пользователь покупает услугу (выделяет объявление), мы создаем запись в таблице истории и в таблице объявлений помечаем поле selected = 1. И в дальнейшем у нас выполняется скрипт по cron, который проверяет историю покупок и исходя из даты меняет значение selected.
Вариант 2:
У нас есть 2 таблицы, 1 таблица истории покупок услуг и 2 таблица самих объявлений.
Когда пользователь покупает услугу (выделяет объявление), мы создаем запись в таблице истории и в таблице объявлений записываем дату, до которого будет действовать выделение, например selected_time = 2015-08-20 00:00:00.
В первом случае выборка будет WHERE selected =1,
а во втором случае: WHERE selected_time > текущей даты.
Собственно какой из предложенных вариантов будет более практичнее ?
И selected_time можно вынести в отдельную от объявлений таблицу, что я и сделал бы.
У вас такие сущности:
- Оплата выделения объявления на N дней\часов\секунд. Это лог оплат\действий
- Само выделение определенного объявления. Это таймер для объявлений, содержит метки времени со связью
- И сами объявления отдельно
nepster09: Облегчит выборку с БД? Да, конечно. Но представьте себе, что cron по какой-то из причин может перестать менять 1 на 0 в нужное время. Кто-то может случайно удалить, или забыть прописать задачу в cron при переезде, или модифицировав скрипт допустить ошибку, или система будет настолько перегружена что он не отработает как надо. Что тогда? А тогда все ваши объявления, которые уже должны быть 0, все еще будут 1. Человеческий фактор причина большинства ошибок.
Виталий Хоменко: кстате я заметил у Вас тут в приписке указано, что вы занимаетесь Yii2. Можно вас пригласить в переписку на почту nepsterxxx@mail.ru, для коммерческого предложения ?