Я кодирую новый {ежемесячный | ежегодный} платный сайт с теперь типичной «реферальной» системой: когда новый пользователь регистрируется, они могут указать {username | реферальный код} другого пользователя (это можно обнаружить автоматически, если они пришли через специальный URL-адрес), что заставит реферера получать процент от всего, что платит новый пользователь.
Прежде чем изобретать велосипед, я хотел бы знать, есть ли у кого-нибудь из вас опыт хранения данных такого типа в реляционной БД. В настоящее время я использую MySQL, но я считаю, что любое хорошее решение должно быть легко адаптировано к любой СУБД, верно?
Я ищу поддержку следующих функций:
Система онлайн-биллинга - после оплаты каждого счета подсчитывается заработок для рефералов, и они смогут выводить деньги. Это включает, конечно, возможность просматривать счета / платежи в Интернете.
Платные опции различаются - они различаются по своему характеру и стоимости (которые иногда будут меняться), поэтому комиссионные должны рассчитываться на основе каждого окончательного счета.
Отслеживание рефералов (отношения между пользователями, дата, на которую они были переданы, и любая другая полезная информация - есть идеи?)
Простой способ доступа к историческим справочным данным (сколько было выплачено) или начисленные комиссии.
В будущем я мог бы предложить обменять накопленные денежные средства для продления подписки (покрывая всю новую подписку или только ее часть, при необходимости оплачивая разницу)
Несколько уровней - Я думаю заплатить около 10% от прямой указанной прибыли + 2% на следующем уровне, но это может измениться в будущем (добавьте больше уровней, измените проценты ), поэтому я смогу хранить исторические данные.
Обратите внимание, что я не планирую использовать это в каком-либо другом проекте, поэтому я не беспокоюсь, что он будет "включай и работай".
Работали ли вы с подобными требованиями? Если так, как вы справились со всем этим? Вы бы порекомендовали какую-либо конкретную схему БД? Почему?
Есть ли что-то, чего мне не хватает, что помогло бы сделать это более гибкой реализацией?