我有两张表,会员表和订阅表。假设架构如下
TABLE member {
member_id integer [not null, pk]
phone_number varchar(15) [not null, UNIQUE]
membership enum(['STUDENT', 'STAFF', 'STAFF_SON']) [not null]
name varchar(100) [not null]
faculty varchar(64)
email varchar(100)
}
和
TABLE subscription {
member_id integer [not null, pk, ref: - member.member_id]
active bool [not null]
invoice varchar(256)
subscription_date datetime [not null]
expiration_date datetime [not null]
}
现在,如何存储订阅表的历史记录,以跟踪特定会员在课程期间的订阅变化?即,当会员续订时。
我尝试了很多东西,但我怀疑它们的效率。 我们称其为
subscriptions_record
,它应该与 subscriptions
具有一对多关系。这是我的第一个解决方案
TABLE subscription_records {
id integer [pk]
member_id integer [fk, ref: > subscription.member_id]
invoice varchar(256) [fk, ref: > subscription.member_id]
subscription_date datetime [fk, ref: > subscription.member_id]
expiration_date datetime [fk, ref: > subscription.member_id]
}
这是一个好的解决方案吗?如果有任何有关如何改进我的方法的反馈或建议,我将不胜感激。
附注数据库最多将包含 20k 成员。
我将
subscription_records
视为订阅的审核历史记录。如果是这样,那么我建议还添加 last_modified_datetime
和 last_modified_user
列来记录上次更改订阅的时间和人员。
我也会把
active
栏放回去;如果用户将 subscription
标记为非活动状态,然后又恢复为活动状态?
你可以
delete
来自subscription
的记录吗?如果是,那么您必须重新考虑是否要在 subscription_records
表上拥有外键。
确保您在
subscription
上以及随后在 subscription_records
上的插入/更新/删除操作是在一个事务中完成的
您可能还想在表中添加一个或两个索引,具体取决于打算如何查询它。