0

新しい人をデータベースに登録するときはいつでも、一意の番号を割り当てる必要があるという要件があります。この番号は、システムが稼働するときに定義された番号から開始されます。したがって、クライアントが「500,000 から始めましょう!」と言った場合、最初に割り当てられる ID は 500000 になります。

簡単 - 自動インクリメントフィーンド。

ただし、これIDAccount Number個人をアカウントにリンクするために外部クライアントに送信されるものです。auto inc の主キーを使用するという考えもあったかもしれませんが、PK を外部向けの「個人番号」として使用するのは良くないと思います。

auto inc pk を持つテーブルと、番号を追加する person テーブルへの ID があると誰かが言いました。しかし、それは奇妙に思えます。

私の考えは、settingsテーブルに新しい列を追加することです。これは実際には 1 行しかなく、システムのシステム設定が含まれています。列は になり、INTと呼ばれNextAvailableIdます。すべての行Versionには、Timestamp( RowVersion) の列があります。

私の計画は、または何かと呼ばれる関数を作成するGetNextIdことです。これは、単に次のことを行います。

  1. という変数を作成します。@AssignedID
  2. という変数を作成します。@Version
  3. NextAvailableIdバージョンだけでなく、設定テーブルから を取得します。
  4. Set AssignedID = NextAvailableId
  5. 設定テーブルの更新、設定NextAvailableId = AssignedID + 1 WHERE version = @Version
  6. 更新された行数を確認します。1 の場合は、別のプロセスが ID を取得する前に、最新の ID を取得してインクリメントし、テーブルに保存し直すことができました。
  7. 更新された行数が 0 の場合 - 誰かが私たちの前に数字を取得したので、行が更新されるまでもう一度やり直してください。

私の個人に「口座番号」を割り当てるための安全で有効な計画のように聞こえますか?

実際には人やアカウント コードではないことに注意してください。これは、別のシステムに保存するために個人に適用する必要があるベンダー ID です。Person と Account を (貧弱な) 例として使用します。

私がしなければならないことは、「口座番号」の一意の割り当てを処理する方法を見つけることです。手動の方法が悪い考えであり、より良い方法がある場合、それは私を大いに助けてくれます.

4

1 に答える 1