読者です 読者をやめる 読者になる 読者になる

一個のSQLでやるか分割するか

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は十分分かりやすいし、許容範囲内なんだけど、一般的にはそうではないらしい・・・?


一般的って何ですか!