3

約 10 人のユーザーが同時に利用する CRM ベースのシステムを構築しています。

同じレコードが別のユーザーによって既に開かれている場合に、同じレコードが開かれ、使用され、保存されるのを防ぐ最善の方法は何ですか?

私は、ユーザー 2 がユーザー 1 の変更を数秒で上書きする可能性のあるシナリオをもう一度推測しようとしています。

4

1 に答える 1

2

いくつかの方法があります:

1) タイムスタンプ列をデータベースに追加し、非表示フィールドのフォームに投稿するだけです。誰かが編集後にレコードを保存すると、クライアントから受け取ったタイムスタンプ値とデータベースで現在利用可能なタイムスタンプ値を比較できます。それらが等しい場合 - 変更を保存し、タイムスタンプ列を更新します。それ以外の場合 (誰かがそのレコードを編集したばかり) - 変更を保存せず、その状況を何らかの方法で処理します。ここでの問題は、データベースからタイムスタンプ値を取得して比較する必要があることです。その間 (値を要求した後、まだ変更を保存していない場合)、誰かがレコードを更新する可能性があります。その時間枠はわずか数ミリ秒であり、そのため無視できると思います。

そのようなことをする機会はありませんでしたが、私が覚えているように、データベースは通常、何らかの方法で行をロックできます。したがって、ロックが解除されない限り、読み取りの試行は停止されます。このようにして、上記の問題を回避できるとします。

2) セッション状態を制御できる場合は、誰かが編集のためにレコードを開いた後、レコードを編集中としてマークできます。そのマークには、編集者のセッション ID を含めることができます。編集が完了したら、そのマークを削除します (誰でも再編集できます)。しかし、誰かが編集を開始し、ページを開いたままにする可能性があります。したがって、セッションがまだ生きているかどうかを確認する必要があります。終了したら、レコードを編集用にマークします。

于 2012-10-27T20:49:17.460 に答える