no a nie możesz po prostu w tabeli zapisać dnia tygodnia , godziny rozpoczęcia i godziny zakończenia? czyli np. PN | 13:00 | 14:30 , a potem jak będziesz dodawał to sprawdzasz czy godzina startu lub godzina zakończenia nie znajduje się w przedziale który już jest w bazie, bo nowo dodany kurs nie może ani zaczynać się pomiędzy startem a końcem innego kursu ani nie może się też kończyć pomiędzy startem a końcem innego kursu dla tego samego dnia tygodnia
czyli np.
robisz tabelę
course_id | course_day | course_start | course_end
np. 2| PN | 1430 | 1545
SELECT course_id FROM courses WHERE course_day = $new_couse_day AND ( ($new_course_start > course_start AND $new_course_start < course_end) OR ($new_course_end > course_start AND $new_course_end < course_end) OR( $new_course_start < course_start AND $new_course_end > course_end) )
ja przynajmniej tak bym do tego podszedł, jeżeli zapytanie zwróci wynik inny niż zero to znaczy że przedział jest zajęty, najlepiej jakbyś oparł to o jakiś generowany kalendarz z podświetleniem zajętych godzin dla zwiększenia usability
//edit właściwie trzeba uwzględnić jeszcze jedną sytuację czy kurs nie zaczyna się przed i kończy po jakimś istniejącym kursie, kod poprawiony