我正在做一个个人项目,需要一些mySQL数据库的指导。我试图模拟一个航空公司预订系统,其中一个用户的个人帐户添加到一个帐户数据库表(用户名和密码信息)。然后,我有我的航班数据库表来存储所有可用的航班。航班数据库表包含所有航班的信息(列):出发城市、到达城市、起飞时间、到达时间、价格、可用座位和座位容量。
我的问题是:当用户预订航班时,我必须更新航班表中的可用座位值(int)。但是,我还必须将航班添加到帐户表中的用户帐户中。我想知道如何在mySQL中处理这个问题,我是否需要在Accounts表中添加一个新列,并从from的db表中添加相应的航班表索引。然后继续添加已预订的航班列作为用户预订的航班,以跟踪用户已预订的所有航班?是否有更好的方法来更新帐户表的航班预订信息?
我们非常感谢所有的帮助。
发布于 2013-11-15 19:47:01
老实说,我可能会采取一些不同的做法。您可能会考虑添加一个额外的桌子,跟踪座位预订。类似于:
表:账户
ID | First Name | Last Name | Username | Password
表:航班
ID | DepartureCity | ArrivalCity | DepartureTime | Price | SeatingCapcity
表:保留
ID | Account_ID | Flight_ID | SeatNumber
然后,您可以使用SQL函数和数学来确定特定航班上可用的座位数,并在进行更新时只维护预订表。这也链接所有航班,一个特定的帐户是相关联的,而不是“硬编码”到一个特定的列。(例如:用户可以预订多个航班)
发布于 2013-11-15 19:50:36
实现这一目标的最佳方法是引入一个新的表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 = ?
这种结构有几个优点:
booked_flight_1
、booked_flight_2
等。您必须检查哪个插槽尚未被占用,当您考虑删除时,这个位置变得越来越复杂。在这里,就像运行这个一样容易
插入预订(user_id,flight_id)值(1,2)如果必须检查给定的航班是否可用,最好使用您的程序检查这一点,并将预订插入数据库,如果是的话。
联接和事务可能是您会发现有用的技术。MySQL文档和关于关系数据库的每一本好书都将为您介绍这方面的内容。你的问题听起来像一个经典的教学例子。
https://stackoverflow.com/questions/20009044
复制相似问题