Hi, first time here answering a question - thought it was about time i gave something back.
Q1. Is this approach correct?
OK, I see what you are doing and there are 101 different ways of doing this. What you need to do is sit down with pens and paper and sketch out what your end points are and work back, drawing / short hand the queries.
Ask yourself lots of questions like...
Can i double book? If i have a booking ID can i get start finish / times, who is the expert? If someone cancels or changes an appointment do i want to record this? Yes time slots are 60minutes but that could change how do you mange prep time before a booking or admin after? Can an expert book a holiday before slots are available to clients?
You might want to think about a 'slot' as a product/service (another table) and define it. E.g its 60 minutes, costs £x, is it open for advice on kittens, motorcycles or unblocking drains. Can any expert advise?
A booking is a start time, with a slot/product (with duration), expert id, ..... You might want to pre populate a calendar with bookings, as they are taken by clients they become unavailable......
Q2. An Expert can take a full day leave...
An expert taking time off either a day of single slot is in reality a slot that is booked by the expert not a client. Ditch the holiday table and just use the booking table and aggregate the days/slots an expert has taken off if you need stats.
BUT the biggest question to ask is, 'Am I reinventing the wheel?' Are there open source solutions out there? Search Google, GitHub and Packagist list that you can use or tweak?
I hope this helps