スケジューラーの「繰り返し」

スケジューラーの「繰り返し」を実装するにはどうしたらいいんだろう。
基本データ構造として日時をキーとした事象オブジェクトのデータベースを作ってるんだけど、繰り返しのデータは日時のキーの上には置けないな。やっぱり繰り返し予定は別に持って、随時(表示する毎に)全繰り返しデータから判定するのかな……?繰り返しが増えてくると遅そうだけど……
あと、「予定の移動」が難しい。つまり、「通常、毎月第一月曜は1時から営業会議なんだけど、来月だけは火曜に、次の月は3時に、その次からは通常通り」とか。これって結構よくあるよね。対応するには「繰り返し予定の例外」を記録する必要があるのかな?「繰り返し予定”営業会議”の2004年11月と2004年12月は例外」と?するとこの例外情報は”営業会議”オブジェクトが持つんだろうか。で、”営業会議”が持つ例外情報には日付がある……
すると表示する都度に「範囲内の通常スケジュール」→「繰り返し情報の中から範囲内に該当する条件の情報の抽出」→「繰り返しの例外に該当しないかの判定」あ、例外情報が範囲外の場合があるな…とすると例外情報は通常スケジュールと同じように日時データをキーにしないといけないのか。例外繰り返しスケジュールを特殊な通常スケジュールということにして日時データベースの上に置いて、予備情報として繰り返し予定へのリンクを持つ? か…
うーん、めんどくさい。変更があった場合いろんなところ探さないといけないなー
何かすっきりした実装方法無いでしょうか?