sql-server – 编写一个简单的银行模式:我应该如何使我的余额与
我正在为一个简单的银行数据库编写模式.以下是基本规格:
>数据库将存储针对用户和货币的交易. 银行应用程序将通过存储过程专门与其数据库通信. 我希望这个数据库每天接受成千上万的新交易,以及更高数量级的余额查询.为了快速提供余额,我需要预先汇总它们.与此同时,我需要保证平衡永远不会与其交易历史相矛盾. 我的选择是: >有一个单独的余额表并执行以下操作之一: >将交易应用于交易和余额表.在我的存储过程层中使用TRANSACTION逻辑,以确保余额和事务始终保持同步. (由Jack支持.) 我必须依赖基于安全性的方法来确保不能在存储过程之外进行任何更改.否则,例如,某个进程可以直接将事务插入到事务表中,并且在方案1.3下,相关的余额将不同步. 当我第一次解决这个问题时,我阅读了these two讨论并决定选项2.作为参考,你可以看到它的简单实现here. >您是否使用高负载配置文件设计或管理了这样的数据库?你对这个问题的解决方案是什么? 例如,我知道对事务表的架构更改将需要重建余额视图.即使我存档事务以保持数据库较小(例如,通过将它们移动到其他地方并用摘要事务替换它们),不得不在每次模式更新时重建数千万个事务的视图,这可能意味着每次部署的停机时间明显更多. 存档交易: 让我详细说明存档事务和上面提到的“汇总事务”.首先,在这样的高负载系统中,定期归档是必需的.我希望保持余额和交易历史之间的一致性,同时允许将旧交易转移到其他地方.为此,我将用每个用户和货币的金额摘要替换每批存档交易. 所以,这个交易清单: user_id currency_id amount is_summary ------------------------------------------------ 3 1 10.60 0 3 1 -55.00 0 3 1 -12.12 0 存档并替换为: user_id currency_id amount is_summary ------------------------------------------------ 3 1 -56.52 1 通过这种方式,与归档事务的平衡可以维护完整且一致的事务历史记录. 解决方法不允许客户持有少于0的余额是一项业务规则(由于超过草案的费用是银行赚取大部分资金的方式,因此会迅速改变).当行插入到事务历史记录中时,您将希望在应用程序处理中处理此问题.特别是因为你可能最终得到一些客户透支保护,一些客户收取费用,一些客户不允许输入负数.到目前为止,我喜欢你要去的地方,但如果这是一个实际的项目(而不是学校),那么需要将很多想法投入到业务规则中等等.一旦你有了银行系统并且在那里运行的重新设计空间不大,因为有关于人们可以获得资金的非常具体的法律. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |