3

「Person」、「Area」、「Person_Area」の 3 つのテーブルがあるとします。一人一人が多くの領域で働くことができ、各領域には多くの人がいる可能性があります。「person_Area」は、person_id と area_id を含むブリッジ テーブルです。

私のコードでは、個人フォームに 2 つの ASP リスト ボックスがあります。リスト ボックス 1 には使用可能なすべての領域が含まれており、リスト ボックス 2 には、ユーザーの選択に基づいてリスト ボックス 1 の領域を取り込むことができます。リスト ボックス 2 に入力される領域は、人がいる領域です。

これはすべて問題なく簡単ですが、データベースに保存することにしたとき、「person_Area」テーブルを挿入、更新、削除する方法がわかりません。すでにテーブルにある場合、その人物の領域を再挿入したくありません。また、ユーザーがリスト ボックス 2 から領域を削除した場合、サーバーにポストバックするときに、コードはその領域を削除することをどのように認識しますか?

特定の人物の「Person_Area」テーブル内のすべてのレコードを削除してから、現在のユーザー選択をすべて再度追加することは合理的でしょうか? またはより良いオプションがありますか?私は困惑しています。

4

2 に答える 2

2

削除して再挿入する理由はありません。これらの行のいずれかが変更されたかどうかさえわからない場合は、多くの作業が必要です。

私の意見では、2 つの合理的な選択肢があります。

  1. UI への「変更」 (領域の追加、領域の削除) を追跡し、データベースに対して同じアクション (行の削除、行の追加) を実行します。(誰かが領域を追加してから、SAVE を押す前に領域を削除した場合、またはその逆の場合を考慮する必要があります。内部フラグをキャンセルするだけで、INSERT を実行してから DELETE を実行しないでください)

  2. そのユーザーの person_area テーブルを論理的な順序でクエリするだけです (リストボックスの順序と同じ方法)。次に、レコードセットとリストボックスの行を 1 つずつ見ていきます。リストボックスにない行がデータベースにある場合は、DELETE を実行します。リストボックスにデータベースにないエントリがある場合は、INSERT を実行します。

2 番目の方法は、私にはかなり単純明快に聞こえます。おそらく、これが最初に採用するアプローチです。

于 2010-09-01T21:25:30.037 に答える
0

If you are using a database system that has the MERGE command, this would be a good approach. The MERGE command can handle the INSERT, UPDATE and DELETE actions in a single command based on the comparison of your list with the contents of the table.

于 2010-09-01T21:33:11.880 に答える