2012-04-13 12 views
1

時間に基づいてプロバイダが異なる価格を指定できるようにするための職制を作りたいと考えています。だから、9時から15時まではM-Fで、10時から9時の間の土曜日と日曜日に課金する特定の仕事のために10ドルを請求するかもしれません。異なる時間に指定された異なる価格を把握できるように、データベースを設計するにはどうすればよいですか?私には標準時間はありませんが、プロバイダーはいつでも自由に選択することができます。カレンダーの価格

私は、次のstructueを考えていた:タスクはMF上にある場合

価格

provider_id 
task_id 
price 
Mon 
Tues 
Wed 
Thurs 
Friday 
Saturday 
Sunday 
time_start 
time_end 

だから、それから「1」の列月曜、火曜、のために入力されます...ただし、土曜日と日曜日の列には0が入力されます。

+0

私の最初の考えは、7つの別々の列があり、日にちには1つの整数のビットマスクがあると恐れていましたが、ビット列で、おそらくそれほど悪くない32/64ビット整数ではないと思います。私はまた、時間のデータを別のテーブルと参照に分割するのではなく、それをすべてのレコードに含めるのではなく、その違いを本当にどちらかにすることはできません。これはカレンダープログラムで定期的なイベントを実装するために人々が解決しなければならない問題の一部なので、インスピレーションの一部を探しているかもしれません。 – Rup

答えて

3

これをいくつかの表に分けるのは間違いありません。すべてを1つのテーブルで行うことはできますが、最終的には、より多くのテーブルでより柔軟に対応できます。

私は次のような構造を示唆している:

ProviderTable

  • ID
  • 何も他のプロバイダ固有の

TaskTable

  • ID
  • 何かがタスク特定

時刻表

  • ID
  • のdayOfWeek列挙
  • たstartTime
  • endTimeは

PriceTable - 一緒に価格とプロバイダ

    に参加する - 一緒に時間とタスク

    • ID
    • TIMEID
    • TASKID
    • 価格

    ジョブテーブルに参加します

  • ID
  • priceID
  • providerID
  • 何かがジョブ特定

これはアップフロント多くの作業のように見えるかもしれませんが、あなたのデータベースが拡大するよう、後で、あなたはそれをやった喜んでいるでしょう。