
データベースを勉強しているものです.
勉強の題材としてWEBアプリで予約システムみたいなものを作ってみているのですが,正規化したテーブルに対してデータを追加する際にどのようにすればいいのか悩んでいます.
予約tableと予約詳細tableを作り,予約IDで関係付けようと思っているのですが,
予約が入った際に予約tableのデータをinsertしてから予約詳細tableにinsertをすると思われます.このとき,予約詳細tableにデータをinsertする際に予約IDをどのように入れたらいいでしょうか.
1.トランザクション開始
2.予約IDを払い出し(WebAP上の変数で保持する)
3.予約tableに予約IDと登録するデータをinsert
4.予約詳細tableに予約IDと登録するデータをinsert
5.コミット
これをやってしまうと予約IDが別のセッションで同じIDになってしまう恐れがあります.
どうしたらいいでしょうか.
予約IDテーブルでも作って,払い出した際に,他のセッションに奪われないように作るなどの方法をとればいいのでしょうか.
No.2ベストアンサー
- 回答日時:
パフォーマンス重視、予約IDに空き番が出ててもいいならシーケンスが一番いいと私も思います。
予約IDに空き番が出ると困るなら、仕方がないので予約IDテーブル(1レコード)を作成し
トランザクション開始
UPDATE RETURNNING か UPDATE して SELECT で予約IDを取得
予約テーブルと予約明細テーブルにINSERT
COMMIT or ROLLBACK
なら後続トランザクションは予約IDテーブルのUPDATEでWAITになるから重複は発生しない。
(その代わりにここがボトルネックになる危険がある)
No.1
- 回答日時:
PostgreSQL や Oracle であればシーケンスを使ってIDを生成するのが一番簡単な方法でしょう。
シーケンスは並行して複数のトランザクションから取得しても必ず一意になります。
http://www.postgresql.jp/document/9.1/html/funct …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
風俗店を予約する際について 一...
-
ホットペッパービューティーで...
-
美容院の予約内容(メニュー)は...
-
指名したのに
-
婦人科受診
-
初診で皮膚科に行く時に受付で...
-
『予約優先』『予約制』『完全...
-
ラウンドワン[ROUND1] PC団体予...
-
人数様?
-
Accessで予定表を作成しようと...
-
サンリオピューロランドの株主...
-
運転免許証を初めて更新します
-
美容院でカット、カラーの予約...
-
近くの心療内科で、診てもらう...
-
岐阜モレラのアプリでのボウリ...
-
シティヘブンという風俗サイト...
-
往復航空券の復路を乗らず捨て...
-
名古屋から橋本駅(神奈川)ま...
-
キャセイパシフィック航空のオ...
-
特急券(指定席)と乗車券を前...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
風俗店を予約する際について 一...
-
ホットペッパービューティーで...
-
美容院の予約内容(メニュー)は...
-
総合病院にかかる場合は紹介状...
-
運転免許証を初めて更新します
-
サンリオピューロランドの株主...
-
人数様?
-
2回目デート直前にLINE減る。
-
美容院でカット、カラーの予約...
-
ドコモショップの来店予約 家族...
-
同棲している彼とのペースがあ...
-
予約票忘れた
-
ホットペッパーの美容院の予約...
-
昨日仕事が休みだったので車の...
-
本屋での本の予約なんですが、 ...
-
取消・予約の繰り返して2月ま...
-
企業説明会へ2回参加したいと思...
-
Accessで予定表を作成しようと...
-
エステの予約をすっぽかしてし...
-
初診で皮膚科に行く時に受付で...
おすすめ情報