[解決済み] データベース内のレコードをバージョン管理する方法【終了しました
質問
データベースにレコードがあり、管理者と一般ユーザーの両方が更新を行えるとします。
このテーブルのすべての変更をバージョン管理し、レコードを以前のリビジョンにロールバックできるようにする方法について、どなたか良いアプローチ/アーキテクチャを提案していただけませんか?
どのように解決するのですか?
例えば
FOO
テーブルがあり、管理者とユーザーが更新することができます。 ほとんどの場合、FOOテーブルに対するクエリを書くことができます。 幸せな日々です。
そして、その後に作成する
FOO_HISTORY
テーブルを作成します。 のすべてのカラムを持ちます。
FOO
テーブルを使用します。 主キーはFOOと同じで、RevisionNumberカラムを加えたものです。 からの外部キーがあります。
FOO_HISTORY
から
FOO
. また、UserId や RevisionDate など、リビジョンに関連するカラムを追加することもできます。 のすべてで、RevisionNumbers を増加させるように入力します。
*_HISTORY
テーブルを使用する(Oracleシーケンスまたは同等のもの)。 1秒間に1回しか変更がないことを前提にしない (すなわち
RevisionDate
を主キーに設定します。)
これで、更新するたびに
FOO
更新する前に、古い値を
FOO_HISTORY
. プログラマーが誤ってこのステップを見逃すことがないように、設計の基本的なレベルでこれを行うのです。
から行を削除したい場合
FOO
には、いくつかの選択肢があります。 カスケードしてすべての履歴を削除するか、論理的な削除を実行するために
FOO
を削除しました。
この方法は、現在の値にほとんど興味がなく、たまに履歴を見る程度である場合に適している。 もし常に履歴を必要とするのであれば、有効な開始日と終了日を設定し、すべてのレコードを
FOO
そのものです。 そして、すべてのクエリーはこれらの日付をチェックする必要があります。
関連
-
[解決済み] メソッドを廃止または非推奨としてマークする方法は?
-
[解決済み] nodejsのコードでpackage.jsonからバージョンを取得する方法はありますか?
-
[解決済み] カレンダーの繰り返し/繰り返しイベント - 最適な保存方法
-
[解決済み】Homebrewは特定のバージョンのformulaをインストールしますか?
-
[解決済み] データベース内のレコードをバージョン管理する方法【終了しました
-
[解決済み] 監査ログを取得するためのデータベース設計【終了
-
[解決済み] 複数のデータベースをそれぞれ1つのスキーマで使用するのと、1つのデータベースを複数のスキーマで使用するのと、どちらが良いですか?
-
[解決済み】多言語データベースのためのスキーマ
-
[解決済み] 各製品が多くのパラメータを持つ多品種の製品テーブルを設計する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン