Mysql 用于存储银行类账户和交易的数据库结构

Mysql 用于存储银行类账户和交易的数据库结构,mysql,database-design,database-schema,banking,Mysql,Database Design,Database Schema,Banking,我们正在为自己的商店添加一个类似银行的子系统 我们已经有客户了,所以每个人都会有一个账户,并且可以进行某种交易(增加或减少账户) 因此,我们至少需要账户实体,交易实体,然后运营部门必须重新计算总余额 您将如何构建数据库以处理此问题 是否有任何标准的银行系统必须使用,我可以嘲笑 顺便说一句,我们使用的是mysql,但我们也会研究一些nosql解决方案,以提高性能。你不会说你的应用程序中是否有一个介于UI和数据库之间的中间层。如果您这样做,您可以选择在何处标记交易并重新计算余额。如果该数据库完全由一

我们正在为自己的商店添加一个类似银行的子系统

我们已经有客户了,所以每个人都会有一个账户,并且可以进行某种交易(增加或减少账户)

因此,我们至少需要账户实体,交易实体,然后运营部门必须重新计算总余额

您将如何构建数据库以处理此问题

是否有任何标准的银行系统必须使用,我可以嘲笑


顺便说一句,我们使用的是mysql,但我们也会研究一些nosql解决方案,以提高性能。

你不会说你的应用程序中是否有一个介于UI和数据库之间的中间层。如果您这样做,您可以选择在何处标记交易并重新计算余额。如果该数据库完全由一个应用程序所有,则可以将计算移到中间层,只使用该数据库进行持久化

Spring是一个框架,它有一种很好的基于注释的方式来声明事务。它基于POJO;ejb的替代方案。它是依赖注入、面向方面编程和优秀库的三条腿凳子。也许它可以帮助你构建和实现你的应用程序


如果您确实有一个中间层,并且它是用面向对象语言编写的,我建议您看看Martin Fowler的“分析模式”。它已经存在了很长一段时间,但是关于金融系统的一章在今天和它第一次写的时候一样好。

我不认为你需要NoSQL来提高速度,因为它不太可能需要太多/任何并行性,也不确定你需要多大程度上不面向模式。除非您开始进入复杂的业务需求,以便对数百万客户和数亿交易(如盈利能力)进行分析,即使这样,这也是一种数据仓库式的问题,如果事务模式变得如此庞大,您可能不会首先在事务模式上运行它

在关系设计中,我倾向于避免任何需要重新计算余额的设计,因为这样你就可以使用余额修复程序等。通过适当的索引和足够简单的设计,你可以对事务进行简单的求和(正和负)以获得余额。交易具有良好的一致性符号约定(无论是加还是减都不含糊-始终添加值)和适当的约束(对于数量有限的交易类型,您可以使用约束指定所有存款为正,所有取款为负)您可以让数据库确保没有像负沉积物这样的异常

即使您希望以某种方式缓存余额,您仍然可以依赖这样一种简单的机制,并在事务表上添加触发器来更新帐户摘要表

我不喜欢把这些放在数据库之外的中间层。您的基本记帐应该相当简单,可以在数据库引擎中快速处理,以便执行查询的任何人或应用程序的任何部分都可以得到相同的答案,而不涉及任何客户端代码逻辑。因此,数据库使用约束、触发器和存储过程的组合确保了略高于参考完整性的完整性(余额不为零的帐户可能不允许关闭,余额可能不允许变为负数等),并根据需要增加复杂性的顺序。我不是在谈论所有的业务逻辑,只是禁止您认为数据库永远不应该进入的低级情况,因为客户端编程不好,或者没有按照正确的顺序执行操作,或者没有使用正确的参数调用操作

在实际银行业务(即COBOL应用程序)中,通常是数据库模式(通常是非关系型和非规范化的,其中许多内容早于SQL),您会看到很多东西,比如12个月的过去余额,这些余额会在帐户结转时更新和转移。这些系统使用的一些数据库是分层的。这就是代码真正重要的地方,因为一切都是在代码中完成的。同样,它有点过时,会遇到各种各样的问题(也就是说,可能很像NatWest正在经历的事情),NoSQL是一种回归的趋势,代码是看待事物的主要方式。我只是倾向于在长时间使用这些东西后思考-我不喜欢缓存余额的系统,也不喜欢没有时间点责任的系统-也就是说,你忽略某个日期后的事务,你可以确切地看到某个日期/时间的事情

我肯定有人有类似银行的数据库设计的“标准”模式,但我不知道他们,尽管多年来建立了几个类似会计的系统——账户和交易并没有那么复杂,一旦你超越了这个概念,一切都会得到高度定制


例如,在某些情况下,您可能会根据GAAP和随时间支付的合同,按照某种时间表确认合同收益。在银行业,你有很多与利息相关的东西,资金成本等的利率不同。一旦你开始将业务需求与基本的资金收支核算结合起来,一切都变得独一无二。

有一个(java)中间层。DB将是唯一的持久性。我对排序模式/标准非常感兴趣,不必重新发明轮子。我会看看你推荐的那本书。谢谢。在“nosql解决方案”中存储银行帐户不会为您赢得AAA评级。这是家庭作业吗?你要处理兴趣吗?当你说像银行一样,它会像银行一样受到监管吗?这是工作。不,我