Таблица врачей - ок.
Таблица категорий - ок.
В реальном мире связь между ними many2many.
Дальше тоньше.
Я бы делал слоты для записи отдельной таблицей, в которую писал datetime начала и datetime окончания слота.
Слоты генерим кроном на N суток вперед.
Правила генерации слотов - храним в каких то отдельных таблицах, - точная структура зависит от того, насколько гибко хочется это все настраивать.
Ну и соответственно отдельная таблица для талонов.
Связь между слотами и талонами many2one, т.к талоны в реальности могут отменяться итд.