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

用于航空公司预订应用程序的动态结构化mySQL数据库,mysql,sql,database,Mysql,Sql,Database,我正在做一个个人项目,需要一些关于mySQL数据库的指导。我试图模拟一个航空公司预订系统,其中用户将个人帐户添加到Accounts db表(带有用户名和密码信息)。然后我有我的Flights db表来存储所有可用的航班。Flights db表包含所有航班,其中包含关于出发城市、到达城市、出发时间、到达时间、价格、可用座位和座位容量的信息(列) 我的问题是: 当用户预订航班时,我必须更新航班表中的可用座位值(int)。但是,我还必须将航班添加到Accounts表中用户的帐户中。我想知道如何在myS

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

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


非常感谢您的帮助。

老实说,我可能会采取一些不同的做法。您可以考虑添加一个跟踪座位预订的附加表。比如:

表:账户

ID | First Name | Last Name | Username | Password
表:航班

ID | DepartureCity | ArrivalCity | DepartureTime | Price | SeatingCapcity
表:预订

ID | Account_ID | Flight_ID | SeatNumber

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

实现这一点的最佳方法是引入一个新的预订表
。一种可能的结构可能是

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\u flight\u 1
    booked\u flight\u 2
    ,依此类推。你必须检查哪个时隙还没有被占用,当你考虑删除时会变得越来越复杂。在这里,它和运行这个一样简单

    INSERT INTO Bookings (user_id, flight_id) VALUES (1, 2)
    
如果您必须检查给定的航班是否可用,最好使用您的程序进行检查,并将预订插入数据库(如果可用)


联接和事务可能是您会发现有用的技术。MySQL文档和每一本关于关系数据库的好书都将为您提供这方面的介绍。我觉得你的问题是一个经典的教学例子。

谢谢你的回答,gregor,它帮了我很大的忙