ms-sql のテーブルに recordversion という名前のタイムスタンプ列を追加すると、何が得られますか?
4 に答える
その列を使用して、ユーザーが別のユーザーのデータを上書きしないようにすることができます。
ユーザー A がレコード 1 をプルアップし、同時にユーザー B がレコード 1 をプルアップするとします。ユーザー A はレコードを編集して保存します。5 分後、ユーザー B がレコードを編集しますが、ユーザー A の変更については知りません。彼が変更を保存するとき、update where 句で recordversion 列を使用して、ユーザー A が行ったことをユーザー B が上書きするのを防ぎます。この無効な状態を検出し、ある種のデータが古いエラーをスローする可能性があります。
タイムスタンプは主にレプリケーションに使用されます。また、クライアントへの最後のフィード以降 (デルタ フィードを送信する必要があるとき) にデータが更新されたかどうかを判断するためにも使用し、それ以降に変更されたレコードのみを選択しました。これには、次回の実行時に比較できるように、レポートの実行時に (varbinary フィールドに) タイムスタンプの値を格納する別のテーブルが必要です。
タイムスタンプが最後の更新の日付または時刻を記録していると思われる場合、それは行われません。その情報を格納するには、dateTime フィールドと制約 (元の日時を取得するため) とトリガー (更新するため) が必要です。
また、データを追跡したい場合は、次の 4 つの列をすべてのテーブルに追加することをお勧めします。
CreatedBy(varchar) | CreatedOn(date) | ModifiedBy(varchar) | ModifiedOn(date)
完全な履歴は表示されませんが、誰がいつエントリを作成し、誰がいつ最後に変更したかを知ることができます。これらの 4 つの列は、DB に深刻なオーバーヘッドを与えることなく、非常に強力な追跡機能を作成します。
明らかに、すべての変更を追跡し、本格的な履歴を提供する本格的なログシステムを作成できますが、それはあなたが提案していると思う問題の解決策ではありません.
私が知っていること、または Google がすぐに見つけられるように見えることは何もありません。
列にその名前を使用しても、固有のものは得られません。確かに、次の回答で説明されているように、列を作成してレコードのバージョン管理を行うことができますが、列名について特別なことは何もありません。列には任意の名前を付けてバージョン管理を行うことができ、任意の列 RecordVersion を呼び出すことができ、特別なことは何も起こりません。