小编Ale*_*lex的帖子

复式记账的关系数据模型

假设有一家银行、一家大型商店等,希望正确地为内部帐户和跟踪客户帐户进行会计处理。而不是实现满足当前简单而狭隘的要​​求,这将是“家酿”:结果证明这些只是当前简单要求的临时拐杖,并且在出现新要求时很难或不可能扩展。

据我了解,复式记账法是一种行之有效的方法,可满足所有会计和审计要求,包括目前未考虑的要求。如果实施,它将:

  • 消除随着时间的推移会发生的增量增强和费用,
  • 将来不需要加强。

我研究了另一个问题的答案:简单银行账户的衍生账户余额与存储账户余额?,它为内部帐户提供了很好的信息。需要一个数据模型,以便理解实体;他们的互动;他们的关系,@PerformanceDBA 已经给出了这一点。该模型取自该答案:

虽然这对于简单的内部账户来说是令人满意的,但我需要看到一个提供完整复式记账方法的数据模型。

需要添加的文章是Journal; 内部 vs 外部Transactions;等等..

理想情况下,我想看看这些双条目行在数据库方面的样子,整个过程在 SQL 中的样子,在每种情况下哪些实体受到影响等等。案例如下:

  1. 客户将现金存入他的账户
  2. 银行每月向所有客户账户收取一次费用(样本批量作业),
  3. 客户在柜台进行一些操作,银行收取费用(提现+提现费用),
  4. 玛丽从她的账户中汇出一些钱到约翰在同一家银行的账户

让我们称之为System而不是BankBank可能太复杂而无法建模,让问题是关于使用帐户和资产操作的假想系统。客户与系统(存款、取款、后期费用、批量费用)以及彼此之间(转账)执行一组操作。

sql database accounting database-design relational-database

20
推荐指数
2
解决办法
1万
查看次数

复式记账系统中与各州的高级交易

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

我更喜欢后一种具有归一化的模型Transaction

有许多状态长期运行的复杂操作。一笔大交易会影响许多分机。帐户(甚至许多分类帐),您可以反转(发布相反的Transactions),添加新交易(又名费用,罚款)或从所有涉及的分机重新分配资金。状态改变时的账户/账本交易。必须保留对这些特定于流程的表的引用Transactions,并且不要在其中重复Amount在此输入图像描述

更多示例:

在此输入图像描述

一个简单的例子ApplicationTransactionBet由几个 s 组成的,Pledge当您从每个参与者那里获取一些抵押品时。每个参与者甚至拥有不同的资产,并且House可以使用其中的许多资产来满足某些要求。我正在考虑ApplicationTransaction带有鉴别器的通用表D和许多特定的表。

以及带有引用其执行的许多复式记账事务的列的ApplicationTransaction表。State在其生命周期内,ApplicationTransaction它可以发布(make Transactions)其状态更改,但并非总是如此。例如,Bet获取抵押品并在时间到了时释放它Bet,在某些情况下,它会重新分配该操作持有的初始金额,但其某些状态不会发布。

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

另一个用例是Trade两个分机之间。House 可以作为中间人的帐户,必须从双方获取资产,将其转移到特殊的LedgerAccount|XYZ|AL|Escrow|,每个ApplicationTransaction.Type,而不是每个实例。保留与特定实例相关的传输记录Trade,可能会持续一段时间,有多种状态、属性、不同的结果。账户持有人可能会受到一侧的处罚并另一侧得到偿还。没有订单簿或撮合引擎。这种交换过程有几个状态,如果发生这种转变,另一个交易对手可能会参与争议解决StateTrade两个参与者都必须用类似的内容标记 a Payment Received(假设付款是在系统外部完成的)。这就是状态转换。系统可以向每个参与者收取费用。

这不是一个单一的Transaction条目。他们一群。例如,如果我需要将一些金额存入托管,我可以放入 X * 祖母绿和 X * 钻石来与公主约会。因此,它不仅发布了许多(AssetType, Amount, AccountNo)(N * 资产 …

accounting database-design relational-database

7
推荐指数
1
解决办法
2944
查看次数

MaxHeaderBytes 真的有效吗?

srv := &http.Server{
    Addr:           "127.0.0.1:8080",
    Handler:        r,
    MaxHeaderBytes: 1,
}
srv.ListenAndServe()
Run Code Online (Sandbox Code Playgroud)

我通过 curl 使用自定义标头和应用程序提供了几个请求,没有任何错误。我做错了什么?

go

5
推荐指数
1
解决办法
766
查看次数

取消对上下文如此强制性吗?

从 go vet 那里得到这个:

context.WithTimeout 返回的取消函数应该被调用,而不是被丢弃,以避免上下文泄漏

代码如下:

func foo(ctx context.Context) {
  for ... some loop {
    c, _ := context.WithTimeout(ctx, time.Second)
    err = enc.RequestWithContext(c, "some", someRequest, &response)
    if err != nil {
      continue
    }
    if response.Code == -1 {
      break
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

那么在请求后取消它有什么意义呢?只是为了vet开心?无论如何,该上下文已经完成或超时。

func foo(ctx context.Context) {
  for ... some loop {
    c, cancel := context.WithTimeout(ctx, time.Second)
    err = enc.RequestWithContext(c, "some", someRequest, &response)
    cancel()

    if err != nil {
      continue
    }
    if response.Code == -1 {
      break …
Run Code Online (Sandbox Code Playgroud)

go

0
推荐指数
2
解决办法
613
查看次数