Я бы создал таблицу RecurrenceType, в которой будут храниться записи для каждого типа повторения, поддерживаемого вашей календарной системой. Каждое событие в таблице CalendarEvents будет иметь ссылку на идентификатор в таблице RecurrenceType.
Я бы тогда имел в коде объект RecurrenceRules, который содержал бы бизнес-логику вычисления, когда следующей дате будет присвоена текущая или начальная дата, или получения следующих N дат в виде массива.
Большая часть логики повторения, вероятно, должна быть закодирована из перечисленных значений, которые основаны на идентификаторе таблицы RecurrenceType. Я был бы удивлен, если бы вы могли сделать все это управляемым данными, если бы это не была очень простая календарная система.
Надеюсь, это поможет. Звучит как интересный проект.