用于航空预订应用程序的动态结构化mySQL数据库

时间:2013-11-15 19:27:28

标签: mysql sql database

我正在开发一个个人项目,需要一些mySQL数据库的指导。我正在尝试模拟航空公司预订系统,其中用户将个人帐户添加到帐户数据库表(包含用户名和密码信息)。然后我有我的航班数据库表来存储所有可用的航班。航班数据库表包含出发城市,到达城市,出发时间,到达时间,价格,可用座位和座位容量的所有航班信息(列)。

我的问题是: 当用户预订航班时,我必须更新Flights表中的可用座位值(int)。但是我还必须将航班添加到Accounts表中的用户帐户。我想知道如何在mySQL中处理这个问题,我是否必须在Accounts表中添加一个新列,其中包含Flight的db表中相应的flight表索引。然后继续添加预订的航班列作为用户预订航班,以跟踪用户预订的所有航班?是否有更好的方法来更新包含航班预订信息的帐户表?

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:1)

老实说,我可能会对此有所不同。您可以考虑添加一个跟踪座位预订的附加表格。类似的东西:

表:帐户

ID | First Name | Last Name | Username | Password

表:航班

ID | DepartureCity | ArrivalCity | DepartureTime | Price | SeatingCapcity

表:预订

ID | Account_ID | Flight_ID | SeatNumber

然后,您可以使用SQL函数和数学来确定特定航班上可用的座位数,并在进行更新时仅维护“预订”表。这还链接特定帐户与之关联的所有航班,并且不对特定列“硬编码”。 (即:用户可以预订多个航班)

答案 1 :(得分:0)

实现此目标的最佳方法是引入新表Bookings。可能的结构可能是

CREATE TABLE Bookings (user_id INTEGER NOT NULL, flight_id INTEGER NOT NULL);

然后您可以通过

获取给定用户的所有航班
SELECT f.* FROM Users u 
  LEFT JOIN Bookings b ON u.id = b.user_id 
  LEFT JOIN Flights f ON b.flight_id = f.id 
  WHERE u.id = ?

通过

计算给定航班的预订量
SELECT count(*) FROM Flights f
  LEFT JOIN Bookings b
  WHERE f.id = ?

这种结构有几个优点:

  • 如果用户预订越来越多的航班,则无需更改架构。更改数据库的模式是一项非常复杂的昂贵操作。 (顺便说一句:MySQL中有一个最大列数)

  • 您可以在其中添加与预订相关的其他字段。也许您想跟踪预订。

  • 获取和添加数据更自然。如果您添加列booked_flight_1 booked_flight_2等。您必须检查哪个插槽尚未被占用,当您考虑删除时,这将变得越来越复杂。这就像运行这个

    一样简单
    INSERT INTO Bookings (user_id, flight_id) VALUES (1, 2)
    

如果必须检查某个航班是否可用,最好使用您的程序进行检查并将预订插入数据库(如果有)。

联接和交易可能是您会发现有用的技术。 MySQL文档和关于关系数据库的每本好书都会给你一个介绍。你的问题听起来像是一个经典的教学例子。