Database design 复式记账系统中与国家的高级别交易

Database design 复式记账系统中与国家的高级别交易,database-design,relational-database,accounting,Database Design,Relational Database,Accounting,假设有一个复式记账系统: 我更喜欢后一种模式,带有标准化的事务 有许多状态的长时间运行的复杂操作。一笔大额交易影响多个外部账户(甚至多个分类账), 您可以撤销(过帐对方交易s)、添加新交易(即费用、罚款)或从所有涉及的外部账户/分类账交易中重新分配资金 状态改变。 必须在这些特定于流程的表中保留对交易的引用,并且不要重复金额。 更多示例: ApplicationTransaction的一个简单示例是Bet,当您从每个参与者处获取一些抵押品时,它由多个质押组成。每个参与者甚至都有不同的

假设有一个复式记账系统:

我更喜欢后一种模式,带有标准化的
事务

有许多状态的长时间运行的复杂操作。一笔大额交易影响多个外部账户(甚至多个分类账), 您可以撤销(过帐对方
交易
s)、添加新交易(即费用、罚款)或从所有涉及的外部账户/分类账交易中重新分配资金 状态改变。 必须在这些特定于流程的表中保留对
交易的引用
,并且不要重复
金额

更多示例:

ApplicationTransaction
的一个简单示例是
Bet
,当您从每个参与者处获取一些抵押品时,它由多个
质押
组成。每个参与者甚至都有不同的资产处于风险中,
House
可以使用其中的许多资产来满足某些要求。 我正在考虑使用
D
iscriminator和许多特定表的generic
ApplicationTransaction

ApplicationTransaction
表,其中
State
列引用了它执行的许多复式交易。 在
ApplicationTransaction
的生命周期内,它可以发布(生成
Transaction
s)其状态更改,但并不总是这样。例如,
Bet
接受抵押品和 当
Bet
时间结束时释放它,在某些情况下,它会重新分配此操作持有的初始金额,但其某些状态不会过帐

lotking
(这是这里最常用的用例)可能是影响许多帐户的
ApplicationTransaction
的一个例子,它以大量“空投”奖金开始和结束。每个实例都有自己的属性值,属性是静态的

另一个用例是两个外部账户之间的
交易
,House可以作为中间人,必须从双方获取资产,将其移动到特殊的
分类账| XYZ | AL |托管|
,每个
应用程序交易。键入
,而不是每个实例。保留与特定
交易相关的转账记录
例如,可能会持续一段时间,对外部账户持有人有多个状态、属性和不同的结果,这可能是对一方的惩罚,对另一方的还款。没有订单或匹配引擎。这种交换过程有多个状态,如果发生这种
状态
转换,另一个交易对手可能参与争议解决。两个参与者都必须在
交易
上标记类似于
已收到付款
(假设付款是在系统外完成的)。这是一种状态转换。系统可以向每个参与者收取费用

它不是一个单一的
事务
条目。一群人。例如,如果我需要把一些钱存入第三方托管,我可以放入X*翡翠和X*钻石,以便与公主约会。因此,它不仅发布了许多
(资产类型、金额、账户号)
(N*资产*2方),而且还发布到
收入
分类账
。假设我们在一桶
资产上进行交易

还可以添加一些表,限制每个操作类型可能的转换,以便我们可以添加约束。我将其视为状态查找表的副本,带有额外的
NextState
列引用本身,这样它就定义了一组可用状态。但这超出了这个问题的范围

我显然没有在这里解决一个新问题,所以问题是我的设计有什么明显的错误,正确的方向会是什么样子

也许我这边仍然存在误解,但我不认为每个应用程序用例实例都应该产生一次性的
LedgerAccounts
,因为我们不会为每个用例
存款
取款
创建新的
HouseCash
。存款/取款也适用于
ApplicationTransaction
类别,状态转换很少(如被支付处理程序拒绝)。在一个真正的应用程序中,你有一个特殊的表格来处理它,有一个付款方式和金额等

否则,这种方法将导致成千上万的一次性
账本计数。问题不是要求为宇宙建立通用系统的通用模型,而是方向是否正确的问题,不确定我们必须保留一次性账户,正如我已经说过的,我认为
账户
分类账
是获得众议院报告所必需的东西,维护客户帐户,否则它看起来就像在AWS EC2上定义每个CPU核心的帐户一样愚蠢。

参考数据模型 我更喜欢标准化交易的后一种模式

根据SO指南,每个答案仅限于问题。第一个答案中的数据模型满足了这个问题,并且假设对分类账有理解。第二个问题假设不了解分类账,因此第二个答案给出了分类账的完整解释,并且需要更详细的数据模型

无论如何,我们都会使用


问题•方法 有许多状态的长时间运行的复杂操作。一笔大额交易会影响多个外部账户(甚至多个分类账),
当状态发生变化时,您可以回滚、添加新交易(即费用、罚款)或从所有涉及的外部账户/分类账交易中重新分配资金

绝对,绝对,不是。请忘记用IT或CS术语思考。只考虑会计方面的问题(随后在实施时,实施会计要求)

  • 每笔会计或业务交易都是单一的、即时的。它涉及一面的一个分类科目编号
    LedgerNo
    ,另一面