C-Sharp
將多個客戶端數據庫同步到一個中央數據庫
我們有客戶端應用程序,可以安裝在本地機器上,使用者可以離線工作並在其中創建項目。此應用程序已經開發。
現在我們需要創建管理員應用程序,管理員可以在其中查看客戶端應用程序創建的所有項目。所以基本上我們需要將所有客戶端數據庫與一個中央數據庫同步。
我考慮過使用 Microsoft Sync Framework,但挑戰是。
- 假設我有表 MasterProject,其中 ProjectId 是主鍵和標識。
- user1 創建了兩個項目,因此項目 ID 將為 1 和 2。
- user2 創建 2 個項目,其項目 ID 為 1 和 2。
現在我需要將這兩個數據同步到中央數據庫,因為項目 id 是中央數據庫的主鍵,所以它不允許。如果我刪除中央數據庫的主鍵,同步框架不支持。我還嘗試在 ProjectId 和 UserId 上創建複合主鍵,並嘗試通過匹配表的架構來欺騙同步框架,但它不起作用。
我不想更改客戶端應用程序的數據庫。有什麼辦法可以做到這一點?
在我看來,您陷入了XY 問題。您希望查看來自許多不同數據庫的數據,並認為您應該只連接到單個數據庫。這種構想邏輯上使您得出結論,您需要將所有資訊放入一個中央數據庫。
IMO 您真正的問題是需要在一個應用程序中查看多個數據庫中的數據。
完成此操作的一種方法是將單獨的數據庫合併回您建議的中央數據庫。由於您不希望修改現有客戶端以使用主數據庫,這似乎是一個複雜且容易出錯的計劃,會增加您的維護成本。
- 您必須弄清楚如何在沒有衝突的情況下合併單獨的數據庫。
- 您必須擔心與客戶端分開調整主數據庫的性能,因為它自然會比任何單一源數據庫擁有更多的數據。
- 您通過創建一個只供少數使用者使用的主數據庫,人為地增加了儲存/硬體/許可成本。
- 雖然 SQL Express 的空間/大小限制可能適用於客戶端數據庫,但一旦所有數據庫都被拉入主數據庫,總和可能會超過 SQL Express 的限制。
我建議您考慮採取不同的方法。**與其集中數據庫,為什麼不集中連接字元串呢?**按照這條路線,您只需要為管理員編寫一個螢幕來選擇項目,然後為項目數據庫執行正確的連接字元串查找。然後,您將能夠基本上使用客戶端,但根據目標數據庫動態交換連接字元串。
閱讀您的最新評論,您可以從復合鍵開始,以獲得唯一性。主表本身可以有一個密鑰 + 來自使用者項目的密鑰。
每個單獨的項目表可能有也可能沒有更多/更少的鍵。但是,結合每個項目表的鍵集,您將擁有一個唯一的集合,並且仍然能夠表示原始項目表的數據。