Каким образом лучше сформировать связь в таблице?
===================================================

 Добрый вечер.  
  

Возникла весьма интересная и серьезная проблема, по большей части касающаяся оптимизации. Понятия не имею, каким образом правильнее всего реализовать данную систему.  
  

Коротко по обязательному: в тз прописана необходимость создания системы, которая вполне оптимизирована для нагрузки до 5 000 RPS и до 1 000 000 пользователей.  
  

А теперь суть проблемы. Существует три сущности: пользователь, подписка и скидка. У пользователя может быть активны несколько подписок (стандартная связь многие-ко-многим), но при этом каждая подписка имеет огромное количество скидок (в среднем, от 400 до 1800).   

Основная проблема: пользователь активирует подписку, при этом тратит он не подписки, а скидки (их можно задействовать ограниченное число раз). Самое узкое место: необходимо отображать количество оставшихся скидок по всем подпискам.  
  

Мои варианты решения, коих всего два. Первый - мы создаем связь один ко многим для пользователя и подписки, а скидки тратим еще в одной связи: скажем, пользователь - скидка. В таком случае операция извлечения данных для отображения оставшихся подписок будет очень дорогостоящей по ресурсам.  

Второй вариант - при создании подписки мы можем в таблицу пользователь-скидка выкатить все скидки, которые есть в подписке. В этом случае, самой дорогостоящей получится операция создания пользователя (запись 1800 значений в базу одномоментно для одного пользователя - боль) и мягкого удаления подписки (деактивации).  
  

Вопрос: каким образом оптимальнее всего сделать подобную систему? Буду благодарен за любой ответ! 

 Храните счетчике в редисе =) 

 таблица скидок минус таблица трат скидок ну и кэшировать это где то, чтобы каждый раз не запрашивать расчет