How are you making sure that in approach 1 there will be no overlapping entries. when two concurrent users trying to block same seat at same epoch.
my guess is when creating reservation (startTime-endTime entry) you are using select for update kind of thing and then checking if reservation already exist for currTime if not then creating reservation entry.
and for other transactions (like doing payment) just checking where there is an active reservation for currTime.