12

我正处于为我的公司规划和设计定制会计应用程序的早期阶段。我的目标是为数据存储部分使用开源关系数据库,并且我知道有两个得到广泛支持的可靠数据库:MySQL 和 PostgreSQL。

对于需要事务、存储过程、函数和安全性的系统,对于这两个数据库中的哪一个最适合会计应用程序有什么意见,还是我缺少另一个数据库?

我更熟悉 MySQL 和 MS SQLServer 2005,但由于许可证成本,我正试图摆脱后者。

让我补充一下:这不是像 Quickbooks 或 Peachtree 这样的会计需求。这基本上是一个系统,用于处理我们提供的特定业务服务的会计处理。可能有两三个系统可以满足这种需求,在进行任何定制之前的价格在六位数范围内,并且需要我的小公司长期与供应商结婚。因此,我们正在内部构建应用程序。

另外,虽然我很欣赏购买与建造的争论,但我想摆脱那个特定的宗教问题,因为购买之路已经走完了,供应商惨遭失败。有时您只需要自己完成这项工作,这个特定的项目和预算就可以保证。

感谢大家迄今为止的回复。

4

13 回答 13

22

有四种主要的开源关系数据库管理系统可能适用于此类应用程序:Postgresql、MySQL、Firebird 和 Ingres。还有其他系统,例如SQLite,但它们没有这种类型的架构,也不是真正为这种类型的工作负载设计的。这种类型的其他一些开源数据库管理系统确实存在,但由于某些原因(例如缺乏明显的供应商承诺)似乎并不可行。具有此类问题的系统示例是SAP-DB。

Postgresql具有所有开源数据库中最好的功能集,并且支持 XA 事务,如果您的应用程序是一个三层系统并且支持非平凡复杂的事务,您可能会想要这些。特别是,如果您想要执行跨越多个数据库调用的事务,您将需要这个。

多年来,已经构建了 PostgreSQL 的几个商业变体,例如Illustra、 GreenplumEnterpriseDB。 Illustra 是 PostgreSQL 的商业版本,随后被 Informix 收购。Greenplum 是为数据仓库应用程序设计的修改版本。EnterpriseDB 是一家提供支持的商业版 PostgreSQL 以及一些增值软件的公司。

MySQL 5.x 具有支持合理横截面功能的功能集,但它不像 PostgreSQL 那样功能丰富。它具有更广泛的主流接受度,并且将是最容易招募熟练开发人员的开源数据库管理系统。尽管旧版本没有强大的事务支持,但InnoDB等事务存储引擎已经可用一段时间了。目前围绕Sun 收购的政治已经产生 代码 分叉,MySQL 环境有些混乱,5.1 版本中的质量问题存在争议。 然而,MySQL 是迄今为止最受欢迎和最著名的开源数据库管理系统,并且是唯一在开源圈子之外具有显着品牌知名度的系统。

Firebird是 Interbase 的开源版本。最后我看了一下,它没有 XA 支持,但如果您的应用程序设置为两层客户端-服务器系统,那就没问题了。 更新:我找不到关于此的明确规范,但文档确实表明它支持两阶段提交,但我能找到的并没有具体说明它是否支持 XA 协议。该文档暗示 JDBC 驱动程序确实支持两阶段提交。

该系统上一个有趣的变体是Fyracle,它旨在提供与 Oracle 的一定程度的兼容性。它最初是为用作Compiere的后端而开发的,它是针对 Oracle 构建的,并且与它非常紧密地耦合。

Ingres现在可以通过开源许可证获得,但开源社区对它的欢迎是集体打了个哈欠。然而,它功能丰富且非常成熟——我知道有人在 1990 年做 INGRES 应用程序,它可以追溯到 1980 年代。

于 2009-01-05T00:35:56.687 回答
16

我的建议?不。最好买一个。对会计有更多了解的人已经编写了已经处理 GAAP 的好包。他们拥有比以往任何时候都更大的用户群,这将更快地发现缺陷。这是经典的“购买与构建”。编写自己的代码对您的公司没有竞争优势。如果您这样做是因为您担心许可证成本,我会说您没有正确考虑开发时间。这是您可以证明在内部进行此操作的唯一方法。

话虽如此,如果您担心 SQL Server 许可成本,我建议您首先选择 PostgreSQL 或其次选择 MySQL。

于 2009-01-05T00:35:11.353 回答
6

我非常同意 duffymo 和 tuinstoel 等人的回答。重新考虑您的构建与购买决定。给你讲个故事吧:

当我在一家中型公司(国际,年收入超过 1 亿美元)工作时,CFO 决定用 Oracle Financials 取代财务系统。只有那个包不完全符合这家公司使用的会计惯例。

因此,首席财务官聘请了一组合同程序员,并付钱让他们根据首选的会计实践定制 Oracle Financials。她花费了 12 个月的时间,100 万美元的程序员工资,加上软件的初始成本,只是为了复制他们打算更换的会计系统。

她说,如果她必须重新做一遍,她会购买商业包,但将公司的会计习惯调整为软件支持的默认设置。这会更容易、更快,也更有可能成功。

因此,请考虑构建您自己的定制包的成本。还要考虑贵公司在维护、调试和增强该软件方面的持续成本。即使购买六位数的商业包,也可能比支付程序员开发和维护这样一个系统的费用要便宜。


为了更直接地回答您提出的问题,我认为 PostgreSQL 和 MySQL 之间没有与您的项目相关的显着差异。既然您对 MySQL 很熟悉,那么您也可以使用它。

我想提供一个强制性提醒,不要使用不精确的数据类型,如FLOAT财务DOUBLE PRECISION数据。

于 2009-01-05T00:53:32.347 回答
3

对于任何想要使用开源数据库的应用程序,最简单的答案是 Postgres。它比 MySQL 更“为企业做好准备”,更不用说它更好地遵循 SQL 标准。MySQL 在其更高版本中得到了很大改进,但 Postgres 在各个方面都胜过它。

于 2009-01-05T01:49:28.130 回答
2

有开源的免费会计系统。像 osFinancials。我真的不明白你为什么要建立自己的系统?

于 2009-01-05T00:41:51.807 回答
1

对于您的应用程序,这并不重要。从 sqlite 到 MySQL 到 Postgres 的任何东西都可能工作得很好。选择你最熟悉的那个。

于 2009-01-05T01:23:40.257 回答
1

火鸟 - http://www.firebirdsql.org/

于 2009-01-05T01:38:19.243 回答
1

如果您熟悉 MySQL,请使用它。但是选择合适的数据库引擎而不是默认的 MyISAM

存储引擎列表

于 2009-01-05T01:55:30.130 回答
1

老实说,任何通常的嫌疑人都会做这项工作。维护会计科目表和相关数据表是驱动大多数关系模型的根本问题。事实上,如果您考虑会计系统的一般日记帐视图,您所拥有的只是会计科目表和一般日记帐,由交易编号、日期、描述、借方帐户和金额、贷方帐户和金额组成。您所做的其他一切都是对它们的 SELECT 。

尽管如此,有这么多完全足够、经过充分测试和接受的财务包,包括开源免费(如啤酒)版本,除非你是指练习曲、学习项目,否则我会把我的努力在谷歌上搜索并选择一个。

看到你的更新。问题是,这是一个主要由非功能性需求决定的问题。您打算将数据库分布在多台服务器上吗?你期望多少负载?每秒交易量还是每天交易量?在过去的几年里,我围绕这两个方面构建了系统,通常最重要的是可靠性和可用性要求:PostgreSQL 通过强制行原子性和序列化并发更新更有效地处理单行的并发更新。另一方面,MySQL 似乎更好地处理非常大的数据库。然而第三个问题是备份——其中一个(我现在不记得是哪一个)或多或少需要一些停机时间来备份。

于 2009-01-05T04:36:59.040 回答
1

对于内部基于 Web 的会计应用程序,您最好将 Gemstone 作为免费但非开源的对象数据库,将 Seaside 作为 Web 框架。否则称为玻璃。

对于内部应用程序,开发人员的工作量将受到限制。Gemstone,作为一个 smalltalk 图像,提供了迄今为止最好的开发人员生产力。它支持在更改对象定义时迁移对象,从而实现真正的迭代开发。Seaside 将模板替换为精心设计的特定领域语言,用于构建 Web 应用程序。

于 2009-04-02T09:48:11.393 回答
1

我在 PostgreSQL 上构建会计软件。它工作得很好。我会极力推荐它。事实上(无耻的插件),您可能会考虑与我们合作以改进我们的项目并将其用作起点。

具体有几个原因:

  1. LISTEN/NOTIFY 使您能够在发生变化时将其他程序挂接到您的会计数据库中,而无需经常检查表。
  2. 我们发现大多数复杂查询的性能都非常好。

Firebird 和 Ingres 将为您提供非常可靠的关系解决方案。MySQL 我不推荐,因为您实际上将所有内容都绑定到一个只能写入数据库的应用程序(sql 模式汤意味着关系基本上是一个私有 API,而不是它们在 PostgreSQL、Firebird 和 Ingres 中的公共 API),并且这意味着未来的灵活性会降低。

但是,使用 PostgreSQL,您可以在一个盒子中获得一流的、可扩展的开发平台。发展速度快。它坚如磐石。高级功能非常有用。你不会失望的。我们没有去过。

于 2012-09-04T07:12:03.843 回答
0

如果这是一个桌面应用程序,您可能需要查看 SQLite。它在公共领域是众所周知的,而且使用起来并不难。

于 2009-01-05T00:50:08.013 回答
-1

由于您不需要存储过程,因此请将其从列表中删除。

将业务逻辑放在代码中,而不是在数据库中,您会更高兴。如果您有机会开始“清理”,那么将数据库用于最有意义的事情——持久性而不是处理。

一旦你做出决定,MySQL 和 PostgreSQL 之间的细微差别就消失了。两者都是处理几乎相同 SQL 的关系引擎。专注于他们最擅长的事情。

建议:使您的应用程序独立于任何数据库特性。

于 2009-01-05T00:34:23.833 回答