我正在做一个个人项目,需要一些mySQL数据库的指导。 我正在尝试模拟一个航空公司预订系统,其中用户将个人帐户添加到帐户数据库表中(带有用户名和密码信息)。 然后我有我的航班数据库表来存储所有可用的航班。 航班数据库表包含所有航班,其中包含有关出发城市、到达城市、出发时间、到达时间、价格、可用座位和座位容量的信息(列)。
我的问题是:当用户预订航班时,我必须更新航班表中的可用座位值 (int)。 但是,我还必须将航班添加到帐户表中的用户帐户中。 我想知道如何在 mySQL 中处理这个问题,我是否必须向 Accounts 表添加一个新列,其中包含 Flight 的数据库表中的相应航班表索引。然后继续在用户预订航班时添加预订的航班列,以跟踪用户预订的所有航班? 有没有更好的方法来更新账户表,其中包含航班预订信息?
非常感谢所有的帮助。
老实说,我可能会以不同的方式处理这个问题。 您可以考虑添加一个额外的表格来跟踪座位预订。 像这样:
表:账户
ID | First Name | Last Name | Username | Password
表:航班
ID | DepartureCity | ArrivalCity | DepartureTime | Price | SeatingCapcity
表:预订
ID | Account_ID | Flight_ID | SeatNumber
然后,您可以使用 SQL 函数和数学来确定特定航班上的可用座位数,并在进行更新时仅维护预订表。 这还会将特定帐户关联的所有航班链接起来,而不是"硬编码"到特定列。(即:一个用户可以预订多个航班)
实现此目的的最佳方法是引入一个新的表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文档和每本关于关系数据库的好书都会给你一个介绍。你的问题对我来说听起来像一个经典的教学例子。