2011-05-07 97 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