запощу-ка здесь, вроде как для .net тоже актуально:
нужно спроэктировать систему тарифных планов, их покупки, продления, отмены и т.д. то есть, схему базы данных. задача в том, чтобы не дублировать данные там, где можно этого избежать. сейчас у меня так, упрощенная схема
plans(name, price, how_many_months)
orders(name, plan_id, user_id)
payments(order_id, status, date)
в payments в status может быть pending, canceled, paid, refund, что-то еще.
никак не соображу -- этого достаточно? легко ли будет определить какой сейчас текущий plan у пользователя отфильтровав payments, которые paid, и его характеристики: продолжительность, когда начинается, когда кончается и т.п.?
или нужно еще что-то ввести? а если пользователь купит 2 плана, чтобы когда один закончился, сразу начал действовать второй?
повторюсь, что не хотелось бы денормализовывать схему путем добавления данных, которые итак могут быть расчитаны путем join'ов.