我正在处理用户订阅。
用户创建定期订阅。该订阅可能会发生许多事情,例如更新,或者已取消,或者最新的结算失败,或者用户已暂停或重新启动订阅。
你建议:
subscriptions
条记录,其中包含所有可能值的字段,例如开始日期,到期日期,是否有效,结算日期失败,已取消日期,暂停日期,重新开始日期?subscriptions
记录,带有辅助表subscription_events
?此辅助表中的一行可以记录“订阅X已更新”。然后我会查询最新的订阅事件,以确定其当前状态。答案 0 :(得分:1)
不要去1.它对新事件不够灵活。您不希望每次出现新事件时都需要更改表格的设计。你还需要每个事件日期的列,当你想知道事物的顺序时,它就会变得丑陋。 当用户可以拥有多个订阅时会发生什么?
2是对的。为了规范化它,我想你有一个USER表和一个带有SUBSCRIPTION的SERVICE表将两者映射在一起。然后会有一个包含已知可能事件的EVENT表和一个带有时间戳的SUBSCRIPTION_EVENT_MAP映射到EVENT的订阅。
答案 1 :(得分:0)
归结为intention
的{{1}}。以下是许多方法中的一些方法:
您可以使用历史记录表:
design
或者与查找结合使用的历史记录表:
-- stores info re:reason for the last update of a subscription
CREATE TABLE subscription_history (
subscription_id INT
, change_date DATETIME
, change_reason VARCHAR(255)
)
或审计表v1:
-- stores info re:reason for the last update of a subscription
-- but links to a change_reason table for reason id lookups
CREATE TABLE subscription_history_L (
subscription_id INT
, change_date DATETIME
, change_reason_id INT
)
-- lookup table containing change reasons
CREATE TABLE change_reason (
change_reason_id INT
, change_reason VARCHAR(255)
)
或审计表v2:
-- contains all columns in your subscription table plus audit fields
CREATE TABLE subscription_audit (
subscription_audit_id INT
-- All the fields from your `subscriptions` table
, audit_date DATETIME
, audit_reason VARCHAR(255)
, audit_by VARCHAR(255) -- example
-- etc etc whatever other information that is pertinent to the change
)
我不知道你的RDBMS,但这几乎是一般的SQl(我认为我可以更好地用作解释方法而不是单词和单词)