Подтвердить что ты не робот

Хорошая практика для создания ежемесячной системы подписки в базе данных

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

В моем случае эти элементы (и, возможно, некоторые другие, которых я забыл) должны быть включены:

  • Клиент
  • План (например, 'basic'/'premium'). Каждый план имеет ежемесячную цену и количество кредитов (например: базовый план предусматривает 30 кредитов в месяц и премиальные планы безлимитных кредитов).
  • Кредиты - это виртуальные деньги, которые расходуются в приложении.
  • Подписка/отменяют подписку
  • Платежи (обратите внимание, что фактически уплаченная цена может отличаться от базовой цены плана из-за скидки и т.д.).
  • ...?

В дополнение к дизайну базы данных могут быть триггеры, которые необходимо настроить для этого (?).

Мои болевые точки:

  • Я не вижу в общем, что такое глобальный дизайн этого
  • Какая должна быть строка в БД: month_susbscrition (т.е. 1 строка на каждого клиента в месяц) или сама подписка (т.е. 1 строка на клиента)?
  • Как вы будете обрабатывать автоматическое обновление ежемесячной подписки?
  • Как бы вы обрабатывали планирование платежей, если вы планируете использовать такие услуги, как Paypal, для обработки автоматических ежемесячных платежей?

Примечание

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

Спасибо за помощь.

4b9b3361

Ответ 1

Я бы использовал эту модель

Ваши клиенты

Client
------
Client ID
Name
...

Ваши планы (вы можете определить новые планы, когда захотите). Я добавляю Price_per_year, если вы хотите предложить скидку, если клиент покупает 12 месяцев за один снимок (но это только идея).

Plan
------
Plan ID
Name
Credits_per_month
Price_per_month
(Price_per_year)

Подписки

Subscriptions
------
Subscription ID
Client ID
Plan ID
Subscription_start_timestamp
Subscription_end_timestamp

Учитывая эту модель, я бы использовал 1 строку на каждого клиента за план.

Когда клиент подписывается на предложение типа "Премиум с 1-м месяцем!", ваша база данных будет выглядеть так:

Client
------
ID: 1; LastName: Foo; ...

Plan
------
ID: 1; Name: Premium; Credits: -1 (unlimited); Price_per_month: 30
ID: 2; Name: Premium 1st month offer; Credits: -1; Price_per_month: 0

Subscription
------
ID: 1, Client ID: 1, Plan ID: 2, Start: 2014-05-07 08:00, End: 2014-06-06 07:59
ID: 1, Client ID: 1, Plan ID: 1, Start: 2014-06-07 08:00, End: 9999-12-06 07:59

Когда клиент отменит подписку 1 июля, обновите столбец в таблице "Абонент" только месяцем и годом (потому что вы заранее задали день и время).

Subscription
------
ID: 1, Client ID: 1, Plan ID: 2, Start: 2014-05-07 08:00, End: 2014-06-06 07:59
ID: 1, Client ID: 1, Plan ID: 1, Start: 2014-06-07 08:00, End: 2014-07-06 07:59

Чтобы узнать, не отказался ли клиент, вы можете использовать это:

Select Count(client.*) From Client client
Inner Join Subscription sub On sub.client_id = client.id
Where DATE_TODAY Between sub.start And sub.end

Убедитесь, что вы не можете одновременно иметь 2 подписки для клиента.

Это позволяет автоматически обрабатывать ежемесячную подписку в вашем приложении, но не с учетной записью банка /PayPal.

Но некоторые банки предлагают вам две услуги:  - Уникальный дебет  - Периодический дебет

Второй способ позволит вам обрабатывать ежемесячную подписку.

Ответ 2

Я бы использовал реляционную таблицу и реляционную базу данных.

У меня будет таблица Client.

Client
------
Client ID
Client Last Name
Client First name
...

У меня бы была таблица подписки

Subscription
------------
Subscription ID
Client ID
Subscription Purchased Time stamp
Subscription Started Time stamp
Subscription Ends Time stamp

У меня бы была таблица покупок

Purchase
--------
Purchase ID
Subscription ID
Payment method
...

Теперь, чтобы ответить на ваши вопросы. Вы должны задать только один вопрос одновременно.

Какая должна быть строка в БД: month_subscription (т.е. 1 строка на каждого клиента в месяц) или сама подписка (т.е. 1 строка на клиента)?

Одна строка за подписку в месяц.

Как вы будете обрабатывать автоматическое обновление ежемесячной подписки?

Netflix просто делит мою учетную запись PayPal каждый месяц. Вы можете сделать то же самое с PayPal или с помощью кредитной карты. Если вы принимаете кредитные карты, вам нужно будет договориться с банком, обработчиком кредитных карт или PayPal.

Как бы вы обрабатывали планирование платежей, если вы планируете использовать такие услуги, как PayPal, для обработки автоматических ежемесячных платежей?

Netflix просто делит мою учетную запись PayPal каждый месяц. Вы можете сделать то же самое.

Ответ 3

вы можете найти кучу db desings на этом сайте: www.databaseanswers.org/data_models