数据库设计 – 保持表中更新的值是否可以?

我们正在开发预付卡的平台,该平台基本上保存有关卡及其余额,付款等的数据.

到目前为止,我们有一个卡实体,其中有一个账户实体的集合,每个账户都有一个金额,每次存款/取款都会更新.

现在团队中有一场辩论;有人告诉我们,这打破了Codd’s 12 Rules并且每次付款更新其价值都是麻烦.

这真的是个问题吗?

如果是,我们如何解决这个问题?

解决方法

是的,这是非标准化的,但偶尔的非标准化设计因性能原因而胜出.

但是,出于安全考虑,我可能会采用不同的方法. (免责声明:我目前没有,也没有在金融领域工作过.我只是把它扔到那里.)

在卡片上张贴已发布的余额表.这将为每个帐户插入一行,指示每个期间结束时的过帐余额(日,周,月或任何适当的值).按帐号和日期索引此表.

使用另一个表来保存挂起的事务,这些事务是即时插入的.在每个期间结束时,运行一个例程,将未过帐的交易添加到帐户的最后期末余额以计算新余额.将待处理的交易标记为已过帐,或查看日期以确定尚未处理的交易.

这样,您可以根据需要计算卡余额,而无需总结所有帐户历史记录,并通过将余额重新计算放入专用过帐例程,您可以确保此重新计算的交易安全性仅限于一个地方(并且还限制了余额表的安全性,因此只有过帐例程可以写入它).

然后,只需保留审计,客户服务和性能要求所需的历史数据.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...