1

特定のユーザーが特定の日時にアクティビティを予約できる予約システムを開発しています(これらの時間はアクティビティ固有です)。システムは、そのアクティビティが現時点で利用可能かどうかを確認する必要があります(たとえば、その時点でクラスが開催されている可能性があります)。

データベーススキーマでアクティビティを予約できる日時をどのように表現しますか?

例:

アクティビティ-水泳
利用可能な時間:
月曜日:午前9時〜午後5時
火曜日:午前9時〜午後12時
水曜日:午前9時〜午後4時
木曜日:午前10時〜午後3時
金曜日:午前9時〜午後5時

水泳アクティビティのアクティビティテーブルにレコードがある場合。説明、コストなどの詳細を保持しているのはどれですか?このスケジュールをフィールドに保存するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

1

int ScheduleID主キー、int ActivityID外部キー、datetime StartTimetime Interval、および必要なその他の列を含むスケジュール用に別のテーブルを用意することをお勧めします。

次に、新しいアクティビティが以前にスケジュールされたアクティビティと競合するかどうかを確認するときに、LINQ to SQL を使用できます。

bool conflict = (from i in db.Schedules
                 where potential.StartTime > i.StartTime
                 && potential.StartTime < i.StartTime.Add(i.Interval)
                 select i).Count() > 0;

免責事項: DataContext がこのように機能することを 100% 確信できるわけではありません。

于 2012-04-22T17:20:59.003 に答える
0

これを時間関数を使用して開始日と終了日として表します。

これがあなたのコードです

public enum ActivityType
{
    Swimming = 1,
    Biking = 2,
    Basketball = 3,
    Soccer = 4
}

public class Booking
{
    public DateTime BookingStart { get; set; }
    public DateTime BookingEnd { get; set; }

    public Activity Activity { get; set; }

    public bool ValidateBooking()
    {
        // put logic here to ensure that the booking times fall within the activity start and end time
        return true;
    }
}

public class Activity
{
    public ActivityType ActivityType { get; set; }
    public DateTime ActivityStartTime { get; set; }
    public DateTime ActivityEndTime { get; set; }
}

データベースには、この情報を含むテーブルがあります。

予約テーブル

ID int
ActivityID int (foreign key to Activty.ID)
BookingStart DateTime
BookingEnd DateTime

アクティビティテーブル

ID int
ActivityType int
ActivityStartTime DateTime
ActivityEndTime DateTime
于 2012-04-22T17:01:19.947 に答える
0

活動が 15 分間隔で発生することを考えると、関連するカレンダー テーブルが見つかる場合があります。これにより、休業日を除外することもできます。カレンダーには、各アクティビティの日付と 15 分の行を含めることができます。別のテーブルにカレンダー ID とクライアント ID が含まれているため、カウントを取得し、ルールに従ってスロットごとの予約数を制限できます。

于 2012-04-22T20:27:52.067 に答える