sql-server - 复式记账数据库设计

标签 sql-server database sql-server-2005 sql-server-2008 database-design

<分区>

简单的问题

参见 http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html

好的,有 3 个表 ACCOUNT、JOURNAL 和 POSTING

如果要有交易状态,状态栏应该放在哪里?

  1. 状态应该在 Journal 表中
  2. 状态应该在发布表中

请解释您的选择,谢谢。

最佳答案

简单但有技巧的问题?不需要成功/失败状态,因为 JOURNAL 是一个逻辑工作单元,它的所有 POSTING 都是该工作单元的一部分。因此,如果逻辑工作单元成功,则 JOURNAL 及其 POSTINGS 要么存在,要么如果工作单元不成功,则 JOURNAL 及其 POSTINGS 不存在。

这个简单的测试(它在那里是因为它有效,它不在那里是因为它没有)是一个事实的结果,即有一个业务需求来确保 JOURNAL 包含一个由连续的数字序列组成的候选键,这是必要的,因为它给审计人员一种错误的安全感。

在真实世界的系统中,会有第二组表,按照 PENDING_BATCH、PENDING_JOURNAL 和 PENDING_POSTING 的顺序排列,其中包含尚未完成的交易。将各种状态信息保存在这里是有意义的。待处理事务的事务状态属于 PENDING_JOURNAL 表,因为整个日志及其所有发布必须作为一个单元成功或失败,因此单元的状态应规范化为父记录(即 PENDING_JOURNAL)。

关于sql-server - 复式记账数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268871/

相关文章:

sql - 您可以在 SQLServer 2k5 中的链接服务器表的 View 上使用外键吗?

c# - SQLFileStream 异常 "The network path was not found"

sql-server - SQL 服务器 : case multiple operations in then part

mysql - 不同对象类型的数据库架构

ios - 从 Realm 获取所有表(类)

sql - 选择的 Where 子句 - 非 Ascii 字符?

sql - 删除SQL表中的分层数据

sql-server - 如何使用 Lightswitch 项目将新表和/或字段添加到 "external"Azure SQL 数据库?

SQL Server 存储过程 - If Count() 语句

PHP 将实际的函数名称打印到屏幕上