データベーススペシャリスト掲示板


[0176] H31 PM1 問2 設問3 (1)

 yutapさん(No.1) 
お世話になっております。

当問題の答えが「在庫」テーブルとなっております。
在庫テーブルがデッドロックの対象となりうる点については承知しているのですが、
「発注」テーブルが対象となっていない点についてご教授いただけないでしょうか。

出庫要求→在庫引当→(在庫が足りなければ)発注(登録)
入庫→発注テーブルの処理状況を更新

がありますので、発注テーブルについてもデッドロックが発生する可能性があると思っているのですがいかがでしょうか?
2021.06.01 19:17
GinSanaさん(No.2) 
DB・シルバーエキスパート
出庫要求→在庫引当→(在庫が足りなければ)発注(登録)
した後にその在庫の行の発注済フラグをオンにして、
入庫→発注テーブルの処理状況を更新かつ
入庫したタイミングで発注済フラグをオフにするんですよね。
タイミングが重なりようがないから、(そりゃ、物理的な輸送時間をゼロ査定するとか、原理的なことになれば、できますけど)起きないって扱いなんでしょう。
2021.06.02 09:15
GinSanaさん(No.3) 
DB・シルバーエキスパート
というか、INSERTとUPDATEだから、起きようがないですね。やはりタイミングが一致する場合がないのがでかいですが、これが「発注」に処理状況をnullで登録してまたまたトリガで処理状況を更新するんだ、ってなって複数行そういうトリガが呼ばれたら、起きることがあります(qiita.com/smitho/items/c81d58ec212a90478bfe  Insert文一つでもデッドロックが発生する?)。まあ、今回の場合、最初からデフォルトでINSERTすればいいだけだから、そんなのは起きませんが。
2021.06.02 09:34
 yutapさん(No.4) 
GinSana様
コメントありがとうございます。

発注と入庫が同じタイミングにならないという点については理解いたしました。
発注済みフラグが部品単位に1つしか存在しないので、1度発注した部品は入庫されるまで、再度発注されることはないという点を見落としていました。
ありがとうございます。
2021.06.02 19:53

返信投稿用フォーム

スパム防止のために初投稿日から30日経過したスレッドへの書き込みは禁止しています。

© 2016-2022 データベーススペシャリストドットコム All Rights Reserved.

Pagetop