- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,就像我们的普通银行帐户一样,我们有很多交易导致资金流入或流出。始终可以通过简单地汇总交易值来得出帐户余额。在这种情况下,将更新后的帐户余额存储在数据库中或在需要时重新计算该余额会更好吗?
每个帐户的预期交易量:每天<5
预期取回帐户余额:每发生一次交易,平均一天一次。
您如何建议对此做出决定?
非常感谢!
最佳答案
Preface
There is an objective truth: Audit requirements. Additionally, when dealing with public funds, there is Legislature that must be complied with.
You don't have to implement the full accounting requirement, you can implement just the parts that you need.
Conversely, it would be ill-advised to implement something other than the standard accounting requirement (the parts thereof) because that guarantees that when the number of bugs or the load exceeds some threshold, or the system expands,you will have to re-implement. A cost that can, and therefore should, be avoided.
It also needs to be stated: do not hire an unqualified, un-accredited "auditor". There will be consequences, the same as if you hired an unqualified developer. It might be worse, if the Tax Office fines you.
This Answer services the Question that is asked, which is not Double-Entry Accounting.
For a full treatment of that subject (detailed data model; examples of accounting Transactions; rows affected; and SQL code examples), refer to this Q&A:
Relational Data Model for Double-Entry Accounting.
Record IDs
,已部署在SQL数据库中)方便的容器)。ClosingBalance
表(每月每个AccountStatement
一行)中将有一个AccountNo
,以及对帐单日期(通常是每月的第一天)和其他对帐单详细信息。QtyOnHand
表中的PartAudit
列(每个PartCode
每月一行)AccountTransaction
的主键将是(AccountNo
,Transaction DateTime
),它将以毫秒的速度检索事务。 TransactionID
,并且您将通过“交易日期”来检索当月,该日期可能正确或可能没有正确索引,并且所需的行将散布在整个文件中。在任何情况下,其速度都远低于ClusteredIndex的速度,并且由于传播的原因,它将导致表扫描。 AccountTransaction
表保持简单(银行帐户“交易”的实际概念很简单)。它具有单个正Amount
列。 Account
,CurrentBalance
为:AccountStatement.ClosingBalance
,为方便起见,日期为下个月的第一天PartAudit.QtyOnHand
)AccountTransaction.Amounts
的总和,其中TransactionType
表示存款PartMovement.Quantity
)AccountTransaction.Amounts
的总和,其中`MovementType表示提款。 AccountTransactions
处于不断变化的状态,因此必须将派生为。之前的所有月份均已发布并关闭,因此必须使用审计图。 AccountTransaction
表中的旧行。超过10年的公共(public)资金年龄,否则为5年,对于业余俱乐部系统则为1年。 AccountTransaction
表中,请勿在“金额”列中使用负数/正数。金钱总是有正值的,没有负二十美元(或者你欠我的负五十美元)之类的东西,然后得出双重负数意味着其他东西。 AccountTransaction.Amount
而言)。这就需要一个单独的列(一个基准中的两个事实破坏了规范化规则,结果将复杂性引入了代码中)。TransactionType
引用表,该表的主键是(D, W
),以作为您的入金/出金的起点。随着系统的扩展,只需添加(A, a, F, w
)作为调整功劳;调整借方;银行费用; ATM_提款;等AccountTransaction.CurrentBalance
列。他们无法理解:AccountTransaction.CurrentBalance
作为列会导致可怕的问题:AccountTransaction.Amount
时,从该日期到当前的所有AccountTransaction.CurrentBalances
都必须重新计算和更新。 Alex:
yes code would be nice to look at, thank you. Even maybe a sample "bucket shop" so people could see the starting schema once and forever, would make world much better.
SELECT AccountNo,
ClosingDate = DATEADD( DD, -1 Date ), -- show last day of previous
ClosingBalance,
CurrentBalance = ClosingBalance + (
SELECT SUM( Amount )
FROM AccountTransaction
WHERE AccountNo = @AccountNo
AND TransactionTypeCode IN ( "A", "D" )
AND DateTime >= CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
) - (
SELECT SUM( Amount )
FROM AccountTransaction
WHERE AccountNo = @AccountNo
AND TransactionTypeCode NOT IN ( "A", "D" )
AND DateTime >= CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
)
FROM AccountStatement
WHERE AccountNo = @AccountNo
AND Date = CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
By denormalising that transactions log I trade normal form for more convenient queries and less changes in views/materialised views when I add more tx types
SELECT
提供服务。)ENUM
不是SQL。 (免费软件NONsql套件不符合SQL,但是它们确实具有SQL不需要的其他功能。)如果您的应用程序毕业于商业SQL平台,则必须将所有这些ENUMs
重写为普通的LookUp表。以CHAR(1)
或INT
作为PK。然后,您将意识到它实际上是带有PK的表。 关于database - 简单银行帐户的衍生帐户余额与存储帐户余额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688982/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!