Я разработал схему базы данных для продукта подписки. пользователь может выбрать подписку, начиная с даты на определенное количество дней. Пользователь может отменить подписку в течение нескольких дней, сохраняя при этом подписку активным. означает, что если пользователь подписывается на месяц, она может отменить его в дни, скажем, 10,15 и 20, заплатив всего 27 дней (30 минус 3).
До сих пор я придумал эту схему. Нужен лучший подход к разработке базы данных
- каждый пользователь имеет один профиль.
- пользователь может выбрать план.
- Как только пользователь выбирает план, он считается транзакцией, которая также хранит информацию о дате начала и продолжительности этого плана.
- каждая сделка имеет платеж (фокусировка на той части позже)
Теперь, так как пользователь может отменить подписку в любой день, как я должен следить за различными пользователями и дней, на которые они имели подписку?
Решение, которое я имею в виду, представляет собой новую таблицу Plan_Transaction_user, которая будет отслеживать каждую дату и идентификатор транзакции для этой даты. Таким образом, если пользователь отменит подписку на определенную дату, для этой идентификационной записи транзакции не будет записи этой даты.
таблица будет выглядеть следующим образом:
Date Transaction ID
1-1-2017 1
1-1-2017 2
1-1-2017 3
1-2-2017 1
1-2-2017 3
Поскольку связанный с TRANSACTION_ID 2 прервана пользователем за день 2 ее записи транзакции нет в этой таблице.
Теперь, если у меня есть клиентская база из 5000, то в лучшем случае в течение одного года у меня будет 5000 * 365 ~ 1,8 м строк. Я уверен, что это не лучший подход. Не могли бы вы предложить мне лучшую схему или некоторые изменения в существующей схеме, которые могут быть более эффективными? На всякий случай, если вы хотите знать, что я буду использовать MariaDB (AWS RDS) в качестве базы данных, а Python 2 - как язык.
Спасибо, Оджаса
Отслеживание отдельных дат выглядит действительно сломанной. Вы действительно хотите захватить ограниченные диапазоны, такие как даты начала и окончания. – tadman
если я только отслеживаю начало и конец, как бы я запросил «в определенный день, сколько подписчиков было там?» @tadman –
Вы можете использовать оператор 'BETWEEN' для тестирования. – tadman