如何设计保留历史而不重复的数据库模式?

问题描述 投票:2回答:1

概述:商务优惠折扣。用户可以使用折扣。商家提供多种折扣,但只能连续使用。这意味着,最初如果您没有使用某项业务的任何折扣......您只有资格获得折扣1.一旦您使用折扣1,您就有资格获得2,那么一旦您使用2,您就有资格获得3。

所需的功能:

  1. 用户可以查看他们过去声称的所有折扣。
  2. 使用可以查看所有可用的折扣,正确找出您有资格获得每个业务的折扣号码(1 | 2 | 3)。
  3. Biz可以查看他们提供的所有交易
  4. 即使业务改变折扣,索赔的折扣也不会改变。用户历史也不会改变。
  5. Biz应该能够获得所有已声明和未过期折扣的列表。

我的第一个解决方案是简单创建4个表:

  • 我们
  • 用户
  • 折扣
  • Userdiskont

Biz创建折扣,用户获取折扣并将其保存在UserDiscount中。 Biz与Discount有一对多关系。使用UserDiscount折扣有一对多。

问题是如果商家更新他们的折扣或删除它,它会完全改变用户的历史记录,并且即使他们没有过期也可以兑换折扣。

第二是在UserDiscount中创建整个副本。但这看起来像是很多重复。

第三是每次业务更新,或删除他们的折扣只需在折扣中创建新记录。但现在我要为每个折扣添加一个标志,如果这是否是活动的,并且在有3个记录之前,现在可能有100个,这取决于业务更新他们的东西多少次。

sql postgresql architecture database-schema
1个回答
1
投票

为了避免更改历史记录和最小化重复的问题,您不应该在折扣表中编辑记录,而是在需要时添加新记录。如果折扣有效,您可以添加标记,但使用生效日期/到期日期更好。您可以进行的一项优化是允许编辑尚未使用的折扣,以最大限度地减少表中未使用的行。

© www.soinside.com 2019 - 2024. All rights reserved.