统一数据库存储

时间:2011-05-07 13:16:57

标签: mysql database database-design

首先,抱歉问题标题 - 我无法考虑更好的事情。

我有一个有趣的问题。

有三个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请求发票系统
  •   
  • 每张发票都需要存储在数据库中
  •   
  • 在每个外部应用程序中创建每个发票时,我们需要   查询发票系统   最新发票号码。
  •   

我真的很想知道你的方法和建议。在这种情况下,任何活动都受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

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

每当你有一个分布式系统,其中本地副本正在为稍后合并的东西创建记录时,最好使用GUID作为本地主键,或者如果你对GUID有哲学上的反对意见,那么创建GUID作为候选键。通过这种方式,您可以将所有系统(以及任何未来系统)的发票汇集在一起​​,而无需担心密钥冲突,并且您将能够跟踪组合记录返回源记录,如果您必须这样做的话。 / p>

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

集中发票系统还希望在组合发票表上有源代码,以便您可以轻松告知哪个网站最初创建了发票。

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

如果您的客户实际上并不关心发票编号的严格排序,那么另一种方法是让中央系统生成预留发票编号块并将其分配给每个网站。当网站的分配不足时,它会向中央服务器询问另一个块。如果存在沟通困难,这可以为您提供呼吸空间。

答案 1 :(得分:0)

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

例如,对于来自德国的发票,发票可以使用de297,de298等国家/地区域作为前缀。

更进一步,我也将这一年纳入其中。因此,它会在每年年初重置并仍然没有冲突,同时保持发票号码的长度。