2011-05-07 123 views
0

首先,对于问题标题感到抱歉 - 我无法考虑更好的东西。统一数据库存储

我有一个有趣的问题。

有三个Web应用程序:

1. ApplicationA => example.com -> hosted in Germany 
2. ApplicationB => example2.net -> hosted in Australia 
3. ApplicationC => anotherexample.com -> hosted in United States 

所有这些都是完全免费的但是老板正在计划实施一些付费的选项。主要问题是应用程序托管在三个不同位置的单独服务器上。

现在,如果所有者想要实施任何付费选项,他需要创建统一的发票系统(因为发票编号顺序需要正确)。

因此,我们有情况:

1. user buys a premium option on example.com 
2. another user buys a premium option on example2.net 
3. third and fourth users buy extra options on anotherexample.com 

因此,我们有4张发票,所以它们的编号应为:2011/01,2011/02,2011/03,2001/04。

如上所述,主要问题是统一开具发票系统,因为应用程序使用不同的数据库并托管在不同的服务器上。当然,发票应该存储在应用程序指定的数据库中。

理论上我们只有一个问题:发票号码。显然,我们需要创建一个统一的发票存储系统。

可能有几个可能的问题:

  • 可能有很多API请求开票系统
  • 每单发票需要而创造的每一个被存储在数据库中
  • 的我们需要 来查询发票系统的 最新发票编号。

我在你知道你的方法和建议很感兴趣。在这种情况下的任何活动是高度赞赏。

回答

0

首先,我希望example.com,example2.net和anotherexample.com中的独立发票系统都有自己的内部主键,用于从这些系统中生成的发票。每个系统都应该有自己独立的开票逻辑副本,因为您不希望在一台服务器上发生停机而导致每台服务器都无法开具发票。

无论何时您有一个分布式系统,本地副本为以后合并的某些内容创建记录时,最好使用GUID作为本地主键,或者如果您对GUID具有PK的哲学异议,创建一个GUID作为候选键。这样,您可以将所有系统(以及任何未来系统)的发票汇集在一起​​,而无需担心关键冲突,并且您可以将组合记录追溯到源记录,如果您需要这样做的话。

接下来,您需要一个集成的发票系统,其中定期收集所有发票细节。为了实现这一点,您需要在每个本地发票系统上处理自己的记录到中央系统。在本地系统的发票上保留一个标记,以确定哪些发票已成功上传 - 或者如果您的发票量非常高,请使用包含发票密钥的工作清单表,该清单表仍需要在本地发票上传输发票而不是标记表。

集中式发票系统还希望在合并发票表上有一个源代码,以便您可以轻松地确定哪个网站最初创建了发票。

至于发票号码,我假设您的问题是客户对您的发票号码进行正确的排序有点繁琐。您可以让集中式系统使用Web服务为您生成这些号码以获取下一个发票编号。如果集中服务因任何原因而中断,您仍然可以向客户提供“订单参考”(即GUID),并扣留发票编号,直到它可以通过中央服务器生成。这应该能够满足客户对紧张顺序发票号码的需求,同时保持在多台服务器上运行多个站点的能力。

如果您的客户实际上并不关心发票号码的严格排序,那么另一种方法是让中央系统生成预留发票号码块并将它们分配给每个网站。当网站分配不足时,它会向中央服务器请求另一个块。这样可以在遇到沟通困难的情况下为您提供顺畅的空间。

+0

感谢您的惊人答案。主要问题是我觉得我无法为每一个应用程序提供独立的开票系统,或者我不知道如何解决主要问题:发票编号。这不是关于顾客。这是关于我国的税务办公室。基本上,公司需要有严格的发票编号,从每年1开始。这是我在考虑系统时遇到的最大也是唯一的问题。 – 2011-05-07 17:07:41

+0

当我说每个应用程序都有独立的开票系统时,我的意思是代码一个开票系统并将其复制到每个应用程序中,以便每个网站都可以在自己的服务器上运行,而无需依赖其他服务器。然后,您可以从任何一台服务器上运行您的主发票编号,生成网络服务/主发票清单 - 或者完全从另一台服务器上运行。 – 2011-05-07 21:23:14

+0

这就是为什么我也在想。独立账单系统在所有应用程序中。只需一张表合并 - 通过提供发票号码。 – 2011-05-08 20:32:20

0

在我看来,最好使用已编码的发票号码。这样,您就不必担心号码顺序混淆。

例如,发票可以使用de297,de298等国家域作为德国发票的前缀。

再往前走一步,我也整合了一年。因此,它会在每年年初重置并且仍然保持不发生冲突,同时将发票号码保持在一小段时间内。

+0

您将如何重置发票号码?克龙? – 2011-05-07 17:05:22

+0

@John S.,我在PHP中使用我自己的函数来做到这一点。我有一个表,该函数使用。其中我存储了该字段的名称,上次使用年份以及该年度生成的最后一个数字。因此,每次我需要生成一个新号码时,我都会调用更新表并返回新号码的函数。多年来,我在很多应用程序上都做了这个。 – itsols 2011-05-07 17:11:35

+0

没问题?我在问,因为征税办公室在我的国家真的是******* - 对他们来说这样的事情,如发票编号事项:( – 2011-05-07 17:48:11