1

次の値で Web フォームを作成しました

  • ファーストネーム
  • 苗字
  • 住所1
  • 住所2
  • 連絡先1
  • contact2
  • 電子メールID
  • パスワード
  • パスワードを認証する...

送信ボタンをクリックすると、ストアド プロシージャsavedataが呼び出されます。

フィールドとは tableに保存されname、とは に保存されます。addresscontactspersonal_detailsemailpasswordlogin_detail

テーブルpersonal_detailsには列がありますuser_id int identity(1,1) pk...
同じuser_id int identity(1,1) fkものがテーブルで定義されていlogin_detailます...

ここで、2 人のユーザー 1 と 2 が同時にフォームを送信すると、user1 の個人情報がテーブルにプッシュされ、次に user2 の個人情報がプッシュされる可能性があります。

ID をそれぞれ 1 と 2 として生成しています...

しかし、ログインの詳細については、ユーザー2のデータが最初にプッシュされ、次にユーザー1がプッシュされます... ID 1と2を生成しています...これは間違っています....

両方のテーブルに同じ ID を取得する他の方法はありますか?

ありがとう

そして、これが私の最初の質問です...適切に組み立てることができなかったら申し訳ありません...

4

1 に答える 1

3

この保存操作の原子性を確保するには、単一のトランザクションで次の一連の手順を実行する必要があります。

  1. トランザクションの開始
  2. テーブルにレコードを挿入しpersonal_detailsます。
  3. 追加されたこの新しいレコードに対応するuser_idを取得します。
  4. login_details前の手順で取得したuser_idを使用して、レコードをテーブルに挿入します。
  5. トランザクションをコミットします。

また、これら2つのテーブルのレコード間に1対1の対応がある場合、ユーザーの詳細を2つのテーブルに「垂直に分割」することは適切ではないようです。単一のユーザーIDに対して複数の値を保持するユーザーの属性、つまり1対多の関係がない限り、単一のテーブルを持つことができます。

于 2012-09-16T12:13:11.793 に答える