Как бы я это реализовал:
В произвольном, удобном для Вас виде храним периодичность (можно как Вы написали в первом варианте, в формате крона). Дополнительно, отдельным полем храним дату следующего наступления события. Соответственно все выборки ведем просто по дате.
Это для случая если у задачи нет cтатуса выполнения, не нужно смотреть на прошлые/будущие задачи, итд.
Если хочется сделать как в google calendar / icloud - где каждый экземпляр этой повторяющейся задачи по сути достаточно независим - становится чуть сложнее.
Получается 2 таблицы: задача-прототип где хранится периодичность, дата первого запуска и опционально дата последнего, - и задача-экземпляр где хранится конкретная дата и ссылка на прототип.
Сумбурно получилось, не проснулся еще :)
Если что - давайте обсудим :)