2009-11-02 7 views
8

Microsoft Outlookで提供されているものと同様の機能を実装して、会議の予定を繰り返す必要があります。この機能を実装するために必要な、最適化されたデータベース設計を理解しようとしています。イベントの繰り返し発生の詳細を格納するデータベースの設計

ユーザが入力した各実行またはタスクは、毎週、毎月、または毎年のような再発的イベントのようなスケジュール設定にも適用できるという要件です。これらの詳細をDBに保存するためのDBモデル - テーブル構造(制約付き)を提案してください。DB構造には、後で適切なタスクを実行するためにプログラムからアクセスできるものがあります。可能なスケジューラの詳細のスクリーンショットはfollowing linkにあります。

これらの詳細を保存するために、バックエンドでmysql DBを実行しています。ユーザーがリクエストを送信するとすぐに、リクエストの詳細を含むリクエストIDがテーブルに格納され、それに対応するアクションがプログラムによって取得されます。 SQLスクリプトを実行し、値を取得して統計分析を実行することが、ユーザーの意図と同じようになります。しかし、OracleリファレンスDBは多くのユーザーによって動的に更新されるため、再帰的に実行して分析を完了したいと考えています。 mysql dbとref DBは異なっていることに注意してください。

他の詳細が必要な場合はお知らせください。

+0

スピード、信頼性、アクセシビリティ、拡張性などに関して最適化していますか?アクセシビリティはあなたの最も重要な懸念のように思えます。 –

答えて

9

最初の発生の詳細を1つのテーブル(スケジュールされたタスク)に保存し、次にリサイタル(定期的なタスク)の詳細を別のテーブルに保存することをお勧めします。

また、タスクが完了するたびにスケジュールされたタスクテーブルを次回の予定に更新したくなるかもしれません。

次のようにラフスケッチのようになります。表のレイアウトについては

、:

[ScehduledTasks]
タスクID(主キー)
説明や詳細等...
スタート日時
終了日時

[RecurringTasks]
タスクID(外部キー)
頻度:毎日、毎週、毎月または毎年。
DayNo :すべてのx週、月など
WeekOfMonth :(年間の月間毎週1-7、1-31、1〜365)
間隔上で実行するためには何の日最初の、2番目、3番目など...などが表示されます。DayNoに入力すると、その週のの日が指定されます。
MonthOfYear :1〜12。
EndDatetime
出現箇所を実行するための最後の日付:回数を実行します。この値と前の値がNULLの場合、これまでどおりに実行します。

明らかに、タスクの設定方法によっては空白になることがありますが、Outlookでタスクをエミュレートするために必要なものはすべて上記に該当します。

+0

それは私が思ったものですが、どのようにストアするか、またはユーザーが入力した反復スケジュールをより適切に表現するかどうかはわかりません。たとえば、ユーザーは毎月 - 毎週月曜日を繰り返し要求として選択し、プログラムがこれらの詳細にアクセスし、同様にタスクをスケジュールすることができるようにする。 – kshitij

+0

現時点でいくつかの提案をフォーマットしています – Martin

+0

これは多くの助けをしました。 – kshitij

関連する問題