公交车预订系统的座位管理

时间:2015-09-25 16:31:58

标签: mysql database-design

我正在为公交车预订系统设计一个数据库,我无法弄清楚在某些情况下如何限制座位。 假设我有巴士站A-B-C-D-E,它形成从A到E到C和D的路线。巴士有10个座位。现在,如果从AB预订10个座位,另外10个预订DE,系统应该允许预订BC,BD和CD。我无法弄清楚如何设计能够满足所有场景的设计,以避免预订路线。已经满了。

我计划使用PHP进行MySQL开发。这是数据库设计的相关部分(数据库本身太大,我试图做一个简单的演示)

Database

3 个答案:

答案 0 :(得分:1)

如果我理解正确的情况,我会做这样的事情:

ID|busStop|routeTime
1 | A | 01:00

在此表中所有预订都会进行,因此每次预订都会生成一行。 因此,现在您可以计算每条路线上每个站点的预订量以及剩余的座位数。

这会回答你的问题吗?

编辑:当然,您应该为预订的帐户ID添加一列。

EDIT2:您可以使用busDrive(或其类似的)列,而不是使用busStop列,而不存储总线停止A,B ......但存储路径A - B,B - C.

因此,假设客户预订A-B,该行将添加值A-B。我们可以计算出路线A-B还有9个座位。所以现在如果这次公共汽车数据库中有10条A-B记录,我们知道路线A-B没有剩余座位。

当然,你可以在它旁边创建一个表,其中有公交站点

这是你想要的吗?

EDIT3:

用户表:

ID|username ...

busstop table:

ID|busstop|userID ...

busdrive table

ID|busdrive|userID ...

userID指的是用户表中的ID列。

编辑4:所以现在当有人从A-D预订时,你在busdrive中制作三条记录,其值为A-B,B-C和C-D

答案 1 :(得分:1)

我认为你必须从一个包含每个端点的表开始,并使用它的关联父级。

因此,表1定义了每个路线点

RouteId : "A"
RouteName "My A Route"

RouteId : "B"
RouteName "My B Route"

表2(路径)将定义路线的连接方式:

PathId :"P1"
RouteId : "B"
ParentRouteId : "A"

现在你可以使用第三张表来跟踪谁乘坐哪条路线以及它的父母是什么因此累积乘客总数。

我知道这有点模糊,但它应该让你走上正轨。

答案 2 :(得分:0)

存储座位跟踪信息。你可以想出桌子(座位映射)。 假设巴士的起点和终点是 A->E。 因此,我们有以下有效路径来预订机票: A->B、B->C、C->D、D-​​E。

比如说,U1 想为 A-E 预订一个 32A 的座位。 座位映射表将如下所示:

SeatId  ---- Source ----- Destination
 32A          A            B
 32A          B            C
 32A          C            D
 32A          D            E

因此,如果任何用户想要预订路线的票,请说 C - E 您可以简单地查询表中的座位可用性,如下所示。

选择seatId where source !='C' and destination !='E';

另外,假设另一个用户 U2,想在 A 和 C 之间预订座位 32B 现在条目看起来像

 SeatId  ---- Source ----- Destination
 32A          A            B
 32A          B            C
 32A          C            D
 32A          D            E
 32B          A            B
 32B          B            C

如果另一个用户说 U3,想要预订 A 到 D 之间的座位 从上面的查询中,这不会返回任何座位。 选择seatId where source !='A' and destination !='D';

希望这能回答您的问题。