2009-08-16 28 views
0

アプリケーションはトレーニングセッションを実行します。各セッションの環境(ゲームの「ミッション」や「レベル」など)は、データベースに格納されます。データベースの保存、復元、コピー

  • セッションを開始する前に、使用可能なデータベースのうちどれを使用するかを選択できます。
  • セッションデータベース中に変更される可能性があります。
  • セッション変更後のデータベースは通常破棄されますが、新しい名前または同じ名前で保存されることがあります。
  • データベースは、接続されていないコンピュータ間(フラッシュカード上)にコピーされることがよくあります。

環境がプレーンファイルに格納されている場合は、簡単にコピー、ロード、保存できます。 現在、MS SQLバックアップとしてデータベースを格納し、ファイルとしてコピーして保存し、セッションの開始時に実際のDBMSにロードするという同様のアプローチを採用しています。主な問題は変更です。データベーススキーマが変更された場合、すべてのバックアップを更新する必要があります。これはエラーが発生しやすくなります。

追加の "環境id"関係を持つすべてのデータベースを1つのデータベースに格納し、環境をロード、保存、コピーするユーティリティを提供することは、タスクにとっては複雑すぎるようです。

その機能を設計する他の方法はありますか?この問題はおそらくユニークではなく、解決策が必要です。

+0

バックアップエラーを頻繁に更新するのはなぜですか?多分プロセス全体をリエンジニアリングする代わりにこれを修正することに焦点を当ててください –

+0

多くのオフラインコンピュータの多くの個々のファイル - 人為的なエラー。どのコンピュータのどのユーザーも自分のデータベースを編集して保存できることを考慮して、堅牢な自動アップデータを設計することは、この作業の作業にはあまりにも難しいようです。 – ima

+0

なぜ複数のデータベースが必要ですか?追加のスキーマで単一のデータベースを使用してみませんか? –

答えて

1

まず、SQLバックアップのアイディアを省き、データ変更を記録するテーブルに移動する必要があると思います。 次に、すべての通常のテーブルと、保存されているバージョンのリストを記録する別のテーブルを含むソースデータベースがあります。

ので、テーブルXが含まれている場合があります列テストID、TestDesc、TestDesc2など は、その後、あなたがテーブルX_Changesを持つ各テーブルX用SavedDBID、SavedDBTitleなど

次へ]を、含まれているテーブルを持っているかもしれません。これは、テーブルXと同じ列を持ちますが、SavedDBID列も含みます。これは、ソースデータベースとSavedDBIDの間に変更された行を記録するために使用されます。

ユーザーがログオンすると、ソースデータベースのクローンを作成します。次に、チェンジ・テーブルを使用して、クローンの表に保存されたバージョンを反映させます。ユーザーがクローンのメインテーブルを更新すると、変更された行もクローンの変更テーブルで更新されます。 ユーザーがコピーを保存することを決定した場合は、[クローンの変更]テーブルを使用して、ソースとクローンの差異を元のデータベースに記録してから、クローンを破棄します。

私はこれが理解できることを望みます。変更するデータベーススキーマが1つしかないため、スキーマの変更を「バックアップ」に即座に反映させることができます。私はこれがSQLバックアップを使用するよりはるかに簡単だと思います。 フラッシュカードを使用してデータベースをコピーする場合、ソースデータベースのコピーを与えることができますが、必要なセッションに関する情報のみを含めることができます。

+0

この設定のChangesテーブルの目的は?すでにセッション用にデータベースをクローンしているので、すべての変更を保存時に見つけることができます。または、クローンで単純にソースを上書きすることもできます。クローンまたは変更のいずれかを持つことは理にかなっていますが、どちらも過剰です。 – ima

+0

私はもう一度それを読んで、誤解があるかもしれません。異なる "データベース"または "環境"はバージョンではなく、独立しています。 100レベルまたはマップのゲームについて考えてみましょう。プレイ前に1つを選択して編集して保存し、新しいマップを誰かに送ることができます。ロールバックや「マップ」の変更を保存することでお得にお答えします。これはまさに問題ではありません。私は100レベルを保存、ロード、配布することを求めています。 – ima

+0

私の説明は不明だと思います。私の方法は、多数の派生物(かなり前向きな作業ですが)を持つ1つのソースデータベースに対してうまく機能します。無関係なスキーマを持つ複数のソースデータベースがある場合は、それぞれがソース/「ダイナミッククローン」のこのパターンに従う必要があります。 問題を引き起こすのはスキーマの変更です。レベルやその他のファイルでは、1つのコピーの構造に対する変更は自動的にその派生物に伝播されません。 – MartW

-1

可能な解決策の1つとして、SQLサーバーを仮想化します。必要に応じて複数のSQLサーバーを持つことができます。また、それらを個別にクローンしてロールバックすることもできます。

+0

単一サーバー上に複数のデータベースを持つことに比べて、どのような利点がありますか?例えば、 – ima

+0

。 (データベース内の変更だけに限定されません)SQLパッチをインストールするか、データベースに破損が発生する可能性があります。データベースを復元したり、パッチを削除したりするよりも、スナップショットに戻すほうがはるかに簡単です – DmitryK

+0

私はその質問とは関係ないと思います。 – ima

関連する問題