1

我正在开发一个预订系统,某些用户可以在其中预订特定日期和时间的活动(这些时间是特定于活动的)。系统需要检查该活动此时是否可用(例如,当时可能正在举行课程)。

我将如何表示可以在数据库模式中预订活动的日期/时间?

例子:

活动 - 游泳
可用时间:
周一:上午 9 点 - 下午 5 点
星期二 : 9am - 12pm
星期三 : 9am - 4pm
星期四 : 10am - 3pm
周五:上午 9 点 - 下午 5 点

如果我的 Activity 表中有游泳活动的记录。其中包含详细信息,例如描述、成本等,我将如何将此计划存储在字段中?

谢谢。

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;

免责声明:不能 100% 确定 DataContext 会使其以这种方式工作。

于 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 分钟发生一次,您可能会发现一个相关的日历表,这也可以让您排除关闭日。您的日历可以包含每个活动的日期和一刻钟行。一个单独的表将包含日历 ID 和客户 ID,允许您根据规则获取计数并限制每个时段的预订数量。

于 2012-04-22T20:27:52.067 回答