【问题标题】:Database Design for Scheduling用于调度的数据库设计
【发布时间】:2012-09-18 09:29:37
【问题描述】:
我需要为我工作的不同地点创建一个日程安排程序。我需要为每个特定位置从上午 8 点到下午 5 点安排 15 分钟的时间段。我正在努力思考所需的数据库设计。
一些参数:
- 计划至少需要提前两周。
- 与其他地点相比,每个地点都有独特的时间表。
- 时间表必须以 15 分钟为单位。
- 每个位置都有不同的块满时标准。例如,一个位置可以每十五分钟为 3 个客户提供服务,因此他们的街区将是三个。另一个位置可以每 15 分钟为 5 位客户提供服务,这样他们的街区就会在 5 人预定后就满了。
每次我把它画出来,我都违反了一些数据库规范化规则。主要目标是能够查询特定位置的开放“插槽”并显示它们。任何人都知道我应该如何构建我的表,这样我刚才描述的查询就不必费力地工作了吗?
【问题讨论】:
标签:
mysql
database-design
scheduling
normalization
【解决方案1】:
在我看来,您至少需要三张桌子。我的建议:
SCHEDULES - 存储实际的时间表。需要id(即:auto_increment)、location_id(参考“LOCATIONS”表)、time_start、time_end
位置 - 存储位置。需要id(即:auto_increment)和其他适用信息,例如实际的location。
RULES - 这将引用 LOCATION 表。您将需要提供您想要存储的所需信息(即:max_occupants)。这至少需要一个id 字段和location_id 字段。
现在您有三个表来存储所需的数据,其他两个表引用了 LOCATIONS。您始终可以将“规则”添加到 LOCATIONS 表中,但如果您决定有其他限制等,则将其设为自己的表可为您提供灵活性。
【解决方案2】:
您需要为每个位置提供一个设置表,其中包含诸如每 15 分钟可以预订多少客户、开放和关闭时间等信息。您实际上将为每个具有开始和结束时间的“槽”创建一个条目表。
您的其余参数必须在应用层处理,例如计算其他位置的事件数量并查看它们是否已满。
事件
-----
ID
日期开始
日期结束
location_id
地点
--------
ID
姓名
最大客户
开始时间
时间结束
我建议您阅读Mozilla Calendar SQL Schema。它为形成一个坚实的日程安排提供了良好的基础。