If you want to run a job that periodically runs through all the rooms to set a status to "free" if necessary, I would suggest some sort of cron job. You can run it as frequently as once per minute. I do that to change product prices, expire abandoned orders, expire products, etc (pricetack.com).
The alternative is coming up with some business and query logic to piece together a room's availability "on demand", perhaps based on the reserved time periods. In your case, it seems like you will need to do #2 because I would think you would be checking available on a variety of different days for a variety of future dates. It's an interesting programming challenge and one you should probably put some time into thinking about the various alternatives. There might even be some guidance in Google or something.

