一千萬個為什麽

搜索

數據庫保存,恢復和復制

應用程序運行培訓課程。每個環節的環境(如遊戲中的“任務”或“水平”)都存儲在數據庫中。

  • 在開始會話之前,用戶可以選擇使用多個可用數據庫中的哪一個。
  • 在會話期間,數據庫可能會被修改。
  • 會話更改後數據庫通常會被丟棄,但有時可能會以新名稱或相同名稱保存。
  • 數據庫通常在未連接的計算機(閃存卡)之間復制。

如果環境存儲在純文件中,則很容易:復制,加載和保存。 我們目前使用類似的方法:將數據庫存儲為MS SQL備份,將它們復制並保存為文件,並在會話啟動時加載到實際DBMS中。主要問題是修改:數據庫模式更改時,必須更新所有備份,這很容易出錯。

將所有內容都存儲在單個數據庫中,具有額外的“環境ID”關系,並提供實用程序來加載,保存和復制環境,這對於任務來說似乎過於復雜。

有什麽其他可能的方法來設計該功能?這個問題可能不是唯一的,必須有一些徹底的解決方案。

最佳答案

首先,我認為您需要放棄SQL備份的想法,並轉移到記錄數據更改的表格。 然後你有一個包含所有常規表格的源數據庫,另外還有一個表格記錄了它的保存版本列表。

所以表X可能包含列TestID,TestDesc,TestDesc2等 然後你可能有一個包含SavedDBID,SavedDBTitle等的表

接下來,對於每個表X,您都有一個表X_Changes。它具有與表X相同的列,但也包含一個SavedDBID列。對於給定的SavedDBID,這將用於記錄源數據庫和Saved之間的任何更改的行。

當用戶登錄時,您將創建源數據庫的克隆。然後使用更改表使克隆的表反映保存的版本。當用戶更新克隆中的主表時,更改的行也應在克隆的更改表中更新。 如果用戶決定保存其副本,請使用克隆的更改表記錄原始數據庫中源與克隆之間的差異,然後丟棄克隆。

我希望這是可以理解的。它肯定會使任何模式更改更容易立即體現在“備份”中,因為只有一個數據庫模式可以更改。我認為這比使用SQL備份更直接。 至於復制使用閃存卡的數據庫,您可以給他們一份源數據庫的副本,但只包括他們想要的會話的信息。

轉載註明原文: 數據庫保存,恢復和復制