Даже если добавить правильную микроразметку, отписку, оферту и пр. - это еще не значит, что кнопка будет отображаться. Для этого еще нужно быть крутым (тысячи писем ежедневно) и надежным (чтобы ни один юзер ни разу не отправил ваше письмо в спам)
Внешний ключ гарантирует консистентность данных, но требует немного лишнего времени при insert/update.
Индекс обычно значительно ускоряет select, но чуть-чуть замедляет insert/update/delete.
То есть обычно от них польза, но все-таки нужно думать головой, когда их надо или не надо применять.
IdFox, тут же на Тостере каждый день по несколько вопросов от школоты, которая парсит чужие сайты. Можно усложнить, но при желании все равно сопрут контент.
Единственно 100% надежный вариант - хранить ваш авторский контент на флэшке в избушке в глухой тайге без доступа к интернету.
Во втором варианте не надо никаких генераторов. Нужен единственный SQL с group by.
100 врачей максимум по 4 отпуска в год - это 400 записей. Запрос будет работать пару миллисекунд.
мне надо знать точно, сколько парней работают.
И что в этом сложного? select count(*) from ... group by ...
Вариант 1 (простой в реализации, но неэффективный).
Вызвать функцию подсчета кол-ва врачей в заданный интервал.
Если 0, то сдвинуть на неделю и вызвать еще раз с новым интервалом.
Повторять, пока не найдено или пока дата не превысит разумный дедлайн.
Вариант 2 (эффективный):
написать SQL, который находит все диапазоны за N месяцев вперед, где работает хоть один врач. В этом вам поможет group by ... having count(*) > 0, ну и учесть все мои замечания про пересечения диапазонов. Делать это бесплатно за вас нет желания.