I don't think you need time AND dates in separate tables. Couldn't all your dates / times be in one table as a timestamp type and work just as well here?
shows
show_id int PK, show_name text, show_length interval, show_info text, ..., unique (show_id, show_length)
schedules
sched_id int PK, show_id int, start_time timestamp, length interval, FK (show_id,length) references (shows.show_id, shows.show_length)
With a database with constraints, you could then create a constraint on schedule that wouldn't allow you to schedule two shows at the same time. If you're using MySQL, then you might be able to use some new trigger feature or something to do it, but I wouldn't know, I've never used MySQL's triggers / rules or whatnot.
In PostgreSQL, Oracle, DB2, or Firebird it would be quite easy to build such a constraint. And with proper indexing it would still be pretty fast for checks on insert.
I do think you could use a time slots table and hosts table to keep track of who would be playing what and such:
hosts
host_id int PK, hostname text
time_slots
timeslot_id int PK, host_id int FK on host.host_idtime_start timestamp, time_length interval
That's all I can come up with. Does your version of MySQL support intervals and operations to detect overlap and such? If so, intervals can be a great way of handling this data, otherwise you might have to work it out in epoch (seconds since Jan 1 1972 or something like that) which is workable, but a bit harder to debug when something goes wrong on a switch to DST or stuff like that that date / time types handle automagically.