possible/available appointments table
Appointment scheduling is too complex for doing in SQL.  Do it in application code.

Given that, focus on having the database table(s) contain the minimal information to indicate times available and times taken.

The SELECT may end up being "select all rows having to do with a particular day", then the app munches on the data.