So to answer your question, the period came form the membership type,
each membership as it's won period and therefor it's won price.
If i understand your propose, you mean i would do something like that:
A member buy a membership.
1: I insert a row to a table called: "package_order" which contain: id(PK_autoincrement), membershipId(FK_membership), actionDate, memberId(FK_member), actualPrice, note
2: I insert a row to a table name "package_status" which contain: id(PK_autoincrement), packageOrderId(FK_packageOrder), actionDate, actionType, startDate, endDate, status, note
Now, every change that i made like: add time, put on hold, active or cancel...
go the table "package_status" which can also be a log table to any action perform on a bought membership.
Do you pay fees once a period subscription or many times for a subscription period?
The member can pay whenever he wants, he can pay right away or a month later,
he can even pay more then he need and have it save in his account for the next buying.,
so therefore i though to make a table "account" which contain: id(PK_autoincrement), actionDate, memberId(FK_member), actionType(buy, pay, add money for later....), packageOrderId(FK_package_order), balance, note
When buy i insert a negative number, when pay a positive..