• ベストアンサー

イベント日付(複数または連続した日付)をデータベースで管理する方法について

イベント情報のデータベースを作成していますが、 どのように日付情報をデータベースとして持たせたらよいのか悩んでいます。 効率的な方法がありましたら教えていただけると幸いです。 長文になり、失礼いたします。 [目的] イベント毎に開催日時や主催者などのデータベースを構築し、開催日時で検索を行いたい。 [悩みどころ] 開催日時が、”2008年9月24日”のように1日で終わるものであれば問題ないのですが、”2008年9月24~28日”のような連続した日付や、”2008年9月24日、2008年9月26日”のような連続しない複数日の場合に、どのようなデータベース構造を持たせるべきなのか悩んでいます。 [現状の案] 現状は、イベントテーブルと日付テーブルを分けて管理する方法を考えていますが、これが一般的な方法なのでしょうか。 <EVENT_TABLE> event_id:(auto increment) event_name:イベントの名前 <DATE_TABLE> date_id:(auto increment) event_id:EVENT_TABLE.event_id を指すID date:イベント開催日単日 イベントの開催日が1日であれば、一つのevent_idと一つのdate_id。 イベントの開催日が、連続した三日であれば、一つのevent_idと三つのdate_id。 イベントの開催日が、連続しない三日であれば、一つのevent_idと三つのdate_id。

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.3

一般的かどうかはわかりませんが、 複数のテーブルをJOINするのが好みかどうかとか、 データベースの効率を考えるとどうかと言うので決まってくるのでしょう。 私はあまりJOINしたくないと言う気持ちだけの話でANo.1のご回答にあるような感じでしてしまいます。 これに、連続しない開催の場合は、初日のイベントIDを他の開催日のデータに持たせて関連づけておけば、重なるデータ(イベント名など、他詳細情報もこちらに記録されるのだと思っています)は初日の方にだけ記録しておいても、なんとかなるのかなと思います。 と言うのが、私の今までの経験から思いつく事でした。 ANo.2で質問者様の方法で十分との事でしたので、よくよく考えてみると、なるほどその方が拡張性があるのかなと思ったりもしています。 データベース効率はどちらがいいのかわかりませんが、今お考えになられている方法から遠のくと難しくなるかも知れませんので、別の問題が起こらない間はそのまま進めてみられた方がいいのかと思います。 「DATE_TABLE」は、連続していようとしていまいと関係なく、開催している日分のデータがあると言う事と考えてよろしいでしょうか。 日時で検索するのでしたら、「DATE_TABLE」には、その日の開始時刻と終了時刻を記録しておくようになるのかも知れません。 最終日だけ早めに終わったりするようなイベントもあるのでしたら、「EVENT_TABLE」側で時刻を持つよりもいいのかなと思います。

mmei
質問者

お礼

ご回答ありがとうございます。 投入データを分析すると、明らかに1日のイベント、または連続した日のイベントが多くを占めているようで、連続しないイベントはあまりないことに気づきました。 そのため、連続しない日付のイベントについては、イベント投入フォームにコピーなどの機能を用意して、複数のEvent_idとして管理する方向で検討中です。

その他の回答 (4)

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.5

ANo.3です。 chukenkenkou様、ありがとうございます。 なるほど、よくわかりました。 私が誤解していました。 質問者様へ、惑わせていたら、すみませんでした。

mmei
質問者

お礼

複数の実現方法を得ることが出来まして、今後のDB設計時など、 大変重宝したと感じています。 ありがとうございます。

回答No.4

#1です。 #1の回答は、「表を分けてジョインしないで」と誤解された人もいるようですが、そうではなく、提示された表の分け方で、「イベント開催日単日」としているところを、「開始日と終了日とすればいいのでは?」という意味です。連続する開催の場合は、全日付の行を持たなくても、開始日と終了日の行があればいいということですので、念のため。

mmei
質問者

お礼

十分に理解ができました。 補足ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

連続しないものもあるなら、現状の案で提示なさっている方法で 十分です。 >イベントの開催日が、連続しない三日であれば、一つのevent_idと三つのdate_id。 これは「一つのevent_idと二つのdate_id」ですね?

mmei
質問者

お礼

ご説明が不足しておりすみませんでした。 「連続しない三日であれば、一つのevent_idと三つのdate_id」についてですが、たとえば、イベントAの開催日が、1月1日、2月2日、3月3日のように連続しない三日だった場合には、ひとつのevent_id=イベントAと、上記の三つの開催日を持つdate_idになるのかなと考えた次第です。

回答No.1

連続した日にちは、開始日と終了日を持てばいいと思います。 一日のみの開催は、開始日と終了日で同じ日付を入れておく。 連続しない開催の場合は、開催数分の行で管理する。 上記のようにするのが、操作性などを考えると良いと思います。

mmei
質問者

お礼

早々のご回答ありがとうございました。 まずは、ご提案いただきました方法でDBを構築し、 サンプルデータを複数投入して不都合でないか否かをみているところです。 今のところは、問題ないように思います。