Как я могу улучшить дизайн базы данных для моей биллинговой системы на основе подписки? - PullRequest
0 голосов
/ 11 июня 2018

Я перехожу с Система выставления счетов на основе кредитов на Система выставления счетов на основе подписки .До сих пор я проверял количество кредитов, которые имел пользователь, и основываясь на этом;Я использовал для электронной почты пользователя, было ли продление сделано или нет.В случае первой покупки я использовал активированный план, который выбрал пользователь.

Сейчас я перехожу на систему выставления счетов на основе подписки, в которой я буду хранить подписки с validity и хочуустранить часть кредитов из корня.Вот схема базы данных для моей новой биллинговой системы. Проблема с этой схемой заключается в том, что я не могу обработать событие первой покупки, поскольку нет точного способа узнать, совершает ли пользователь покупку в первый раз и заплатил ли пользователь полную сумму или нет.Я запутываюсь на каждом этапе изменений.

enter image description here

Позвольте мне объяснить, с какой проблемой я сталкиваюсь.Во время обработки транзакции флаг is_active в subscriptions остается null, что означает, что пользователь не может выполнять никаких действий с моим программным обеспечением.Но когда транзакция будет обработана, пользователь вернется на мой веб-сайт, и мой веб-сайт пометит транзакцию paid, что означает, что пользователь заплатил, но, поскольку нет никакой связи между транзакциями и подписками, как узнать, когда помечать подписку как оплаченную,В TransactionController транзакции будут обрабатываться, а в SubscriptionController , подписка будет обрабатываться.

Я не создал связь между подпиской и транзакцией, поскольку в этом случаеМне придется разрешить nullable foreign keys в транзакции, потому что транзакции могут быть и для дополнительных услуг!

Я все больше путаюсь, думая об этом больше.Я не знаю, в чем здесь проблема, но я знаю, что есть некоторые проблемы с дизайном базы данных.Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Что если вы добавите поле parent_id для своей таблицы подписки.

Соотношение между subscription и transaction будет 1: 1.

Кроме того, я предлагаю вам просто активировать членство пользователя немедленно (если вы можете), это дает вам следующееПреимущества:

  1. пользовательский опыт не будет затронут из-за задержки подтверждения транзакции.

  2. связь между subscriptionи transaction создается мгновенно, когда пользователь пытается инициализировать подписку.Вы можете заполнить идентификатор транзакции позже, когда получите идентификатор транзакции.

Надеюсь, что помог.

ps Это относится к php?

0 голосов
/ 11 июня 2018

Вот что мне приходит в голову:

  1. Добавить дату окончания и is_autorenew к вашей подписке
  2. Добавить дату создания и начала платежа к вашей транзакции
  3. Я бы создал новую таблицу, например, для бронирования, которая содержит информацию о пользователе, адрес для выставления счета, цену и способ оплаты.Представьте себе случай, когда гость подписывается, или пользователь меняет свой адрес, или изменяется цена продукта.Эти значения должны быть подлинными.
  4. Создать отношения 1: 1 между бронированием и подпиской и подпиской и транзакцией
  5. Обогатите свою транзакцию возвращенными значениями от поставщика платежных услуг, такими как customer_id илиaction_id.

Это может быть ваша базовая модель DB.Теперь, когда кто-то что-то покупает, вы создадите 3 записи: бронирование, подписка и транзакция, если все пойдет хорошо.Если is_autorenew && is_active - true, запустите cronjob, который автоматически продлит подписку.Для этого вы можете использовать транзакцию в вашей таблице транзакций.Тогда я бы создал новую подписку и связал бы ее с бронированием и транзакцией.Установите старую подписку на неактивную впоследствии.

Надеюсь, это вам немного поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...