【发布时间】:2021-11-14 12:06:16
【问题描述】:
我有已购买的许可证,并成为用户在购买许可证时获得的 user_licenses。许可证的有效期、费用、名称和描述都存储在许可证表中。
购买许可证时,在 user_license 上设置到期时间(Date.now + License.expiration_years)
所以基本上用户许可到期日期是:
UserLicense.expiration_date = Date.now + expires_in_days.days + expires_in_weeks.weeks + expires_in_months.months + expires_in_years.years
还有其他方法可以处理expire_in_* 列吗?也许使用某种 jsonb 结构?
# license table:
t.string :name, null: false
t.string :description
t.integer :amount, default: 0, null: false
t.jsonb :details, default: {}, null: false
t.boolean :hidden
t.string :currency
t.integer :expires_in_days, default: 0, null: false
t.integer :expires_in_weeks, default: 0, null: false
t.integer :expires_in_months, default: 0, null: false
t.integer :expires_in_years, default: 0, null: false
【问题讨论】:
-
到期日是现在+年,还是现在+天+周……计算?仅存储日期对我来说似乎要简单得多。
-
@Andrew 是的,user_license 到期的计算基于许可证
expire_in_*(expires_in_days, expires_in_weeks...)。不能只存储日期,因为它是到期日期的日期范围。而且真的没有办法在一个字段中存储包含天、周和月的时间范围,因为它不是日期。
标签: sql ruby-on-rails ruby postgresql database-design