■82040 / ) |
Re[2]: レコードのSELECT,UPDATE処理時の排他制御について |
□投稿者/ あさ (11回)-(2016/12/02(Fri) 10:24:35)
|
■No81975 (Jitta さん) に返信
ご返事遅れましてすみません。 今回作成している予約システムは、宿泊業のものではなく、 一時保育に関するものでして。 なので、基本的には当日1日の特定時間のみ使用、1日ごとの利用になります。 もし、連続で予約を入れたい場合は、それぞれの予約で、部屋NOも 変わり得ます。 予約が確定された、予約者が実際に来た、預けた、迎えに来た、精算して終了した、 の各段階をフラグで管理します。
これらのことを踏まえまして、お答えします。
> 1日目の予約が1件、2日目の予約が0件の場合、1日目の部屋Noは2になります。2日目の部屋Noは何番? 2日目の部屋NOは1になります。
> ここで「2」にすると、2日目が1日目になる人の部屋Noはどうなる? 2日目の予約で部屋NO「2」が埋まっている場合、「1」が空いていれば「1」になります。 「1」が空いてなければ「3」になります。 実際のコードでは、すでに埋まっている部屋NOを昇順で並べ、空きがあるかを検索、空きがなければ+1します。
> また、1,2,3と予約が埋まった後、2の人がキャンセルしたら? 2の人がキャンセルした場合は、次の予約は「2」に入ります。
ありがとうございます。
> ■No81893 (あさ さん) に返信 >>ある予約システムを作成しています。 > > ここに書かれているのは「予約をする」ことのみです。 > では、「約が実行された」時は、どうするのでしょうか。 > >>以下のような予約一覧テーブル(分かりやすくするために簡略化します)があるとします。 >>予約Noはオートナンバーです。 >> >>予約一覧テーブル >>予約No 部屋No 氏名 >>10000 1 鈴木 >>10001 2 山田 >>10002 3 佐藤 >> >>新たに予約を行う際には、いきなりUPDATEではなく、 >>まずは部屋NoのMax値(ここでは3)をSELECTして、 >>+1をして、部屋数の定数内であることを確認し、それから、 >>UPDATE(INSERTによる)します。 > > 簡略化してあるということですが。 > 当然、日付があるのでしょう。 > 連泊するときは、どうなるのでしょうか。1日ごとに1レコード使うのか、ということです。 > その場合、2泊目は、部屋Noは、どうするのでしょうか。 > 1日目の予約が1件、2日目の予約が0件の場合、1日目の部屋Noは2になります。2日目の部屋Noは何番? > ここで「2」にすると、2日目が1日目になる人の部屋Noはどうなる? > また、1,2,3と予約が埋まった後、2の人がキャンセルしたら? > > と、コードを考える前に考えなければならないことが、まだまだあるように思います。
|
|