【发布时间】:2018-03-03 01:40:09
【问题描述】:
概述:企业提供折扣。用户可以使用折扣。商务提供多种折扣,但只能连续使用。意思是,最初如果您没有使用某家企业的任何折扣...您只有资格获得折扣 1。一旦您使用折扣 1,您就有资格获得 2,然后一旦您使用 2,您就有资格获得 3。
所需功能:
- 用户可以查看他们过去申请的所有折扣。
- 用户可以查看他们的所有可用折扣,正确找出您符合每个企业的折扣编号 (1|2|3)。
- Biz 可以查看他们提供的所有交易
- 即使商家更改折扣,声称的折扣也不会改变。用户历史记录也不会改变。
- Biz 应该能够获得所有已申请且未过期的折扣的列表。
我的第一个解决方案是简单地创建 4 个表:
- 商务
- 用户
- 折扣
- 用户折扣
Biz 创建折扣,用户获取折扣,然后保存在 UserDiscount 中。 Biz 与 Discount 有一对多的关系。折扣与 UserDiscount 是一对多。
问题是如果 biz 更新或删除他们的折扣,它会完全改变用户的历史记录,并兑换折扣,即使它们还没有过期。
其次是在 UserDiscount 中创建整个副本。但这看起来有很多重复。
第三是每次业务更新,或者删除他们的折扣时只需在折扣中创建新记录。但是现在我必须为每个折扣添加一个标志,如果这是否是活动的,并且在有 3 条记录之前,现在可能有 100 条,这取决于企业更新他们的东西的次数。
【问题讨论】:
-
在数据仓库中,这是通过 SCD2 实现的。同一项目的每个配置都有一个开始和结束日期。如果有很多配置,则当前配置有一个标志指示。如果您需要存储多个状态,则无法存储多个记录。你的第三个选项对我来说最有意义。记录会膨胀,但这就是数据库的用途
标签: sql postgresql architecture database-schema