EDIT:Saya salah mengerti pertanyaannya.
Desain Anda baik-baik saja - tidak ada yang salah dengan memiliki beberapa baris dalam tabel yang mencerminkan beberapa genap. Satu-satunya penyempurnaan yang mungkin Anda pertimbangkan adalah memiliki AvailableFrom dan AvailableTo sebagai nilai datetime, bukan waktu, sehingga Anda dapat menghapus kolom "date". Ini membantu Anda menangani ketersediaan yang mencakup tengah malam.
Sisa jawaban TIDAK berhubungan dengan pertanyaan - ini didasarkan pada kesalahpahaman tentang masalah ini.
Pertama, Anda perlu tahu kapan jam kerja dokter; ini mungkin sederhana (9 - 5 setiap hari), atau kompleks (9-5 Senin, tidak tersedia Selasa, 9-12:30 Rabu - Jumat). Anda mungkin juga perlu mencatat waktu istirahat - makan siang, misalnya - setiap hari, sehingga Anda tidak menjadwalkan janji temu saat makan siang; Saya berasumsi dokter yang berbeda akan mengambil istirahat mereka pada waktu yang berbeda.
Selanjutnya, daripada merekam "ketersediaan", Anda mungkin ingin merekam "janji" untuk setiap hari. Seorang dokter tersedia ketika jadwal mereka mengatakan mereka bekerja, dan ketika mereka tidak memiliki janji yang dijadwalkan.
Jadi, skema Anda mungkin:
Doctors
--------
DoctorID
....
DoctorSchedule
------------
DoctorID
DayOfWeek
StartTime
BreakStartTime
BreakEndTime
EndTime
DoctorAppointment
----------------
DoctorID
Date
AppointmentStartTime
AppointmentEndTime