保留历史数据

时间:2009-09-27 17:41:23

标签: database-design transactions data-modeling

我正在编写一个标准的数据库支持的业务应用程序。假设我使用银行账户和“决策”。决策是用户将钱从一个账户转移到另一个账户的选择。每个决定都在特定日期进行。决策可以具有一个或多个“源帐户”,并且每个“源帐户”将具有一个或多个“目标帐户”。我们将其称为源帐户,因为资金将离开帐户...此外,每个决策和帐户都有相关信息,如姓名,余额等。

用户希望查看他过去的决定,并且有不寻常的业务需求。默认情况下,当决策时间到来时(例如每个月的第一天),他希望所有先前的决定都被复制到新的月份。这是因为他很可能一次又一次地做出同样的决定,但是他希望能够灵活地在一个新月份改变决策的任何参数,而不会影响他前几个月。

作为程序员,当用户开始新的月份时,我只需在Decision表中插入新行,但我更新了Decision.Date。这样,用户可以每月更改每个决策的源帐户列表。是否有更优雅的方式来实现同样的目标,而不是复制所有的决定?

2 个答案:

答案 0 :(得分:1)

您的“决策”被视为会计中的交易,当交易有多个借记/贷记来源时,细分为T accounts

我会继续记录帐户交易 - 这是开发人员和客户的审计跟踪。但是有一个问题是这个表填满了有限的(如果有的话) - 最有可能的搜索将在当月内,回溯~6个月。您希望根据滚动日期而不是年更改来存档数据。

我曾与之合作过的大多数会计系统都能够安排外发​​交易(IE:抵押贷款,汽车贷款,医疗,保险) - 根据以前的信息插入新记录无关紧要,相应地更新日期。

答案 1 :(得分:0)

你可以改写写作。只显示上个月的“决定”,让用户选择并编辑它们。但是,当它“保存”时,您将插入一个新行而不是更新。这使得上个月的“决定”更多地成为了这个月的模板而不是绝对的模板。

如果用户不希望想要在本月推出上个月的“决定”,那么两者之间的选择可能会非常重要。你要删除额外的行吗?它们是在没有用户输入的情况下自动生效,还是在创建时停用等等。

另一种选择可能是版本控制机制。每个“决定”获得一个Id和一个版本(或生效日期)。每个月的决策都有DecisionId和DecisionVersion。更新Decision的“关键字段”会导致创建新版本。这为每个“决定”保留了变化历史和血统。

在“自动储蓄计划”这样的场景中,版本控制对我有意义。您将创建一个名为“自动储蓄计划”的“决策”,并且您可以更改金额,来源帐户等 - 但它们仍然是“自动储蓄计划”决策的一部分。

相关问题