我正在开发一个个人项目,需要一些mySQL数据库的指导。我正在尝试模拟航空公司预订系统,其中用户将个人帐户添加到帐户数据库表(包含用户名和密码信息)。然后我有我的航班数据库表来存储所有可用的航班。航班数据库表包含出发城市,到达城市,出发时间,到达时间,价格,可用座位和座位容量的所有航班信息(列)。
我的问题是: 当用户预订航班时,我必须更新Flights表中的可用座位值(int)。但是我还必须将航班添加到Accounts表中的用户帐户。我想知道如何在mySQL中处理这个问题,我是否必须在Accounts表中添加一个新列,其中包含Flight的db表中相应的flight表索引。然后继续添加预订的航班列作为用户预订航班,以跟踪用户预订的所有航班?是否有更好的方法来更新包含航班预订信息的帐户表?
非常感谢所有帮助。
答案 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文档和关于关系数据库的每本好书都会给你一个介绍。你的问题听起来像是一个经典的教学例子。