一個のSQLでやるか分割するか
コンサートの予約を行うとして、
- コンサートには席数に限りがある
- 予約のキャンセルも可能
- ただし、予約のキャンセルを行って空席が出来ても、満席状態にしておく
- 満席状態はis_sold_outが1かどうかで判断する
という要望があったとき、
UPDATE Concerts SET is_sold_out = CASE WHEN (SELECT limit_of_seats FROM Concerts WHERE id = @id) < (SELECT count(*) FROM Reservations WHERE concert_id = @id) THEN 1 ELSE is_sold_out END WHERE id = @id
のように1つのSQLにするのがいいか、
SELECT count(*) FROM Reservations WHERE concert_id = @id
と
SELECT limit_of_seats FROM Concerts WHERE id = @id
を実行して、ホスト言語側で比較を行って、空席があるようなら
UPDATE Concerts SET is_sold_out = 1 WHERE id = @id;
を実行するのがいいのか、果たしてどっちなんだろう。
個人的には一個のSQLは十分分かりやすいし、許容範囲内なんだけど、一般的にはそうではないらしい・・・?
一般的って何ですか!