Five booking guards compared
No double-booking: five guards, one invariant
invariant: no two committed rows for room R overlap; overlap is not equality
design
overlaps
retry + contention
verdict
A plain check + INSERT
1 DOUBLE
no retry, silent corruption
BROKEN
B RC transaction
1 DOUBLE
no retry, no predicate lock
BROKEN
C fixed room-row lock
0, winner 1
hot room serializes, 409 rest
SIMPLEST CORRECT
D exclusion constraint
0, winner 1
no hotspot, write boundary
PREFER AT SCALE
E serializable + retry
0, winner 1
40001, retry WHOLE txn
CORRECT IF APP RETRIES
50-thread race on C: winners 1, doubles 0, median 6us, p99 167us (teaching numbers)
extend [9,11) to [9,12) vs new [11,13): the guard re-checks the NEW range, equality would miss it
UNIQUE fits discrete fixed slots only; intervals need overlap, never equality
SELECT FOR UPDATE on the empty reservation result locks nothing: lock the room row or the write
abort means retry the whole transaction with backoff + jitter and a bound, not the failed statement