У меня есть приложение, в котором пользователь может заблокировать определенный товар, и как только он его заблокирует, он должен забрать его через 2 часа .Если он не заберет его через 2 часа, то этот предмет разблокируется, и пользователь теряет 1 шанс блокировки.у пользователя изначально есть 3 шанса блокировки, и , если он проигрывает все 3 за 2 месяца, то он забанен на 2 месяца .сейчас я подготовил схему для этого, но чувствую, что она не оптимальна.схема выглядит следующим образом:
user table
--locking_chances_left //initially 3
--first_chance_miss_date //date on which the user loses its first locking chance
--second_chance_miss_date //date on which the user loses its second locking chance
--banned // boolean field to indicate whether the user is banned
locked_items table
--item_no
--user_id
--locking_time
banned_users table
--user_id
--ban_date //date on which the user is banned i.e lost the last chance
теперь у меня есть событие, которое планируется запускать каждую минуту, чтобы увидеть, был ли какой-либо элемент в таблице locked_items
заблокирован более 2 часов, и если он найдет тоон удаляет его из этой таблицы, который разблокирует элемент, а затем уменьшает locking_chances_left
на 1 из таблицы users
.теперь я должен отслеживать, теряет ли пользователь все свои шансы в течение 2 месяцев, чтобы забанить его.поэтому я сохранил first_chance_miss_date
, чтобы сохранить дату, когда его шансы уменьшатся с 3 до 2, и second_chance_miss_date
, чтобы сохранить дату, когда его шансы уменьшатся с 2 до 1. У меня есть таблица after update trigger
на users
, которая проверяет, когдазначение locking_chances_left
изменяется и обновляет first_chance_miss_date
и second_chance_miss_date
соответственно.Есть ли лучший способ без использования этих 2 полей для miss dates
и только с использованием одного поля.спасибо за то, что вы поняли