如何设计保留历史而不重复的数据库模式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设计保留历史而不重复的数据库模式?相关的知识,希望对你有一定的参考价值。
概述:商务优惠折扣。用户可以使用折扣。商家提供多种折扣,但只能连续使用。这意味着,最初如果您没有使用某项业务的任何折扣......您只有资格获得折扣1.一旦您使用折扣1,您就有资格获得2,那么一旦您使用2,您就有资格获得3。
所需的功能:
- 用户可以查看他们过去声称的所有折扣。
- 使用可以查看所有可用的折扣,正确找出您有资格获得每个业务的折扣号码(1 | 2 | 3)。
- Biz可以查看他们提供的所有交易
- 即使业务改变折扣,索赔的折扣也不会改变。用户历史也不会改变。
- Biz应该能够获得所有已声明和未过期折扣的列表。
我的第一个解决方案是简单创建4个表:
- 我们
- 用户
- 折扣
- Userdiskont
Biz创建折扣,用户获取折扣并将其保存在UserDiscount中。 Biz与Discount有一对多关系。使用UserDiscount折扣有一对多。
问题是如果商家更新他们的折扣或删除它,它会完全改变用户的历史记录,并且即使他们没有过期也可以兑换折扣。
第二是在UserDiscount中创建整个副本。但这看起来像是很多重复。
第三是每次业务更新,或删除他们的折扣只需在折扣中创建新记录。但现在我要为每个折扣添加一个标志,如果这是否是活动的,并且在有3个记录之前,现在可能有100个,这取决于业务更新他们的东西多少次。
答案
为了避免更改历史记录和最小化重复的问题,您不应该在折扣表中编辑记录,而是在需要时添加新记录。如果折扣有效,您可以添加标记,但使用生效日期/到期日期更好。您可以进行的一项优化是允许编辑尚未使用的折扣,以最大限度地减少表中未使用的行。
以上是关于如何设计保留历史而不重复的数据库模式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .Net Core 中提交表单而不离开当前视图并保留当前模型