您将如何为预订系统设计一张桌子?

Jac*_*ack 2 sql-server-2008 database-design

我有一个预订系统的设计数据库。预订系统要求如下:

  1. 预订系统允许用户预订周一至周五上午 8 点至下午 1 点之间的时间段(1 小时)。
  2. 用户可以为该 1 小时时段预订场地。
  3. 预订系统每年开放13周,然后休息13周,再开放13周,休息13周。

我在设计表格时面临的问题是有 3 个重要的控制变量 - 时间段、场地和 13 周。

我通过有一个包含固定行数的表格来起草设计。(因此,对于上午 8 点到下午 1 点,将有 5 个插槽,因此每周将有 25 个插槽。假设有 3 个场地,那么我将有 25 个插槽 x 3 个场地,这给了我 75 行。然后我乘以 75 至 26 周,因为系统将打开两个 13 周。因此,这将给我 1950 个固定行。

但是,问题是如果我通过在晚上 10 点结束来增加小时数,那么我每天将有 14 个时段,这意味着每周将有 70 个时段。如果场地增加到 10 个场地,那么,我将有 70 个插槽 x 10 个场地,这给我 700 排。当然,乘以 26 周,我将需要一个包含 18,200 个固定行的表。由于行太多,设计将难以管理。

该表将类似于以下内容:

+------------------------------------------------- ---------------------+
| 身份证 | 周 | 时间 | 地点 | 用户 | 状态 |
+------------------------------------------------- ---------------------+
| 000001 | 1 | 上午 8 点 | 房间 1 | | 可用 |
| 000002 | 1 | 上午 9 点 | 房间 1 | | 可用 |
| 000003 | 1 | 上午 10 点 | 房间 1 | | 可用 |
| |
| 018200 | 26 | 晚上 10 点 | 房间 10 | | 已预订 |
+------------------------------------------------- ---------------------+

ID 将是该表的 PK。

有没有一种方法可以跟踪每个预订时段,但又不为每个预订时段创建固定数量的行?(每个预订时段将包含 3 个重要数据 - 周、时间、地点)

Joe*_*own 5

如果关注的是大量行的手动维护,您可以(可能)通过为每个维度创建表来解决这个问题:周、时间段和地点。一套完整的可预订槽位将是这三个维度的叉积。实际预订将是另一个表,外键指向所有这三个维度表。

使用这种类型的设计,您将维护 3 + 25 + 26 条记录,而不是维护 3 x 25 x 26 条记录。请注意,如果将星期几和一天中的时间分成两个表,则可以进一步减少要维护的记录数 (3 + 5 + 5 + 26)。

这种方法的问题在于何时(以及如果)您有异常。此设计假设您的日程安排中没有停电。例如,如果您将一个房间关闭几周以进行翻新怎么办?处理此问题的一种方法是创建涵盖停电的预订记录。如果您有足够多的异常,那么管理它们可能几乎和使用蛮力方法一样糟糕。

我会认真考虑的问题是,生成可供预订的初始插槽列表是否真的那么重要。您可以轻松自动化该过程以生成大量可用插槽。这实际上只是一个查询。