9

asp mvc 3、jquery full calendar、ms sql sever 2008、および c# を使用しています。

定期的なイベントを作成する方法を誰かが知っているかどうか疑問に思っていますか?

作り方がわかりません。

たとえば、Google カレンダーでは、予定を毎年繰り返すことができます。データベースでその予定をX回生成するとは思えません。

どうすれば自分のデータベースに 1 つの行があり、必要なときにそれを呼び出すことができるのか疑問に思っています。

また、GoogleカレンダーとOutlookには、最初の月、先月などに繰り返すなど、多くの繰り返しオプションがあります.

これを含むライブラリビルドはありますか? それとも一から作る必要がありますか?

PS

私は共有ホストを使用しているため、ソリューションは限られた権利で機能する必要があります。

4

3 に答える 3

9

イベントの可能な繰り返しをすべて生成すると、(理論的には) ユーザーが決して見ることのないイベントでストレージがいっぱいになります (999,999,999,999,999,999,999 歳の誕生日おめでとうございます!)。

もう少し手間がかかりますが、解決策は基本的に、カレンダーを作成するときにカレンダーエントリをリンクする繰り返しルールのテーブル (または複数のテーブル) を保存することです。

「表示されている曜日ごとに、その日に繰り返されるイベントをチェックする」「表示されている月のすべての週について、その週に繰り返されるイベントをチェックする」「1 年の毎月について」など. .

これらのチェックを何回行う必要があるかは、必要な繰り返しの種類 (および期間) の数によって異なります。

イベントの抑制に関しては、抑制しなければならない日付/時刻のポイントをリストした別の表です。「月曜日を表示する場合、抑制テーブルにリストされているものを除いて、月に繰り返されるすべてのイベントを表示します」

コメントのフォローアップ:

コア情報を格納するために、標準のカレンダー エントリ テーブルが必要です。日付/時刻など...次に、繰り返し情報を格納するための少なくとも 2 つの他のテーブル。繰り返しルールを保存するもの。「毎週月曜日」、「月の最初の日」、「毎年」など...、およびカレンダー エントリとルールをリンクする 3 番目のテーブル

それで:

 calendar entries table  <--->  link table  <--->  repeat rules table

クエリは、考慮している日付に対して適切なルールが出てきて、表示するカレンダーエントリの ID を提供するように構築することの問題です。渡した日付に基づいて適切なルールに動的にリンクする派手なクエリを実行すると、見苦しくなる可能性があります。

于 2011-02-09T19:40:40.057 に答える
0

誰かがこのような質問をするたびに、「Developing Time-Orientated Database Applications in SQL」という本へのリンクが表示されます。無料の PDFとして、またAmazonで合法的に入手できます。

于 2011-02-09T20:59:59.947 に答える