0

質問:

Web サイトの 2 人の異なる管理者ユーザーが同じ顧客 ID を持つ顧客レコードを作成できないようにするにはどうすればよいですか?

背景情報:

私が使用している Web サイトでは、次のことを行うルーチン/メソッドに基づいて、「顧客番号」と呼ばれる番号が自動生成されます。

  1. cust_number_range テーブルを使用して、数値の許容範囲をチェックします。
  2. 顧客テーブルから使用中の最大数を割り出します。
  3. 「新規顧客の作成」フォームに次に利用可能な番号を表示します。
  4. 送信ボタンをクリックすると、レコードを保存する前に、顧客テーブルを再度チェックして、次に利用可能なものとして計算した数が使用されていないことを確認します。それでも問題がなければ、データベースに保存します。

データベースは次のようになります。

customer table
=====================
id           integer - primary key
custnumber   integer
fname        varchar(255)
lname        varchar(255)

cust_number_range
====================
lower_range integer
upper_range integer
id  integer - primary key

私が遭遇した問題は、2 人の管理者がまったく同時に新しい顧客レコードの「送信」をクリックすると、システムが同じ顧客番号を持つ 2 つのレコードを作成することです。ここに私が持っているいくつかの質問があります:

  1. custnumber フィールドを pk の一部にすることはオプションですか? つまり、それは本当に「適切な」解決策ですか?
  2. 問題を解決するために他にどのような方法が必要ですか?

ありがとう。

4

2 に答える 2

0

数字を順番に並べる必要がありますか?「インデックス」テーブルを作成できます。

index_table
====================
index_type integer (possible values - 1 for customers, 2 for orders, etc.)
last_index integer

新しい顧客を作成するたびに、last_index id フィールドを進めて、インデックス テーブルからユーザーのインデックスを作成します。ユーザーがレコードを保存しない場合は、ID をスキップするだけです。

ただし、ほとんどのデータベースには同様のメカニズムを持つ record_id があるため、それを使用することをお勧めします。

于 2013-04-21T22:40:52.337 に答える
0

そのためには、一意の列を使用する必要があります。しかし、データベースにユーザーを追加する前に、コードからもチェックし、ユーザーが存在しないかどうかを確認し、存在しない場合は追加します。

于 2013-04-21T22:38:38.750 に答える