首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >航空公司预订应用程序的动态结构化mySQL数据库

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

Stack Overflow用户
提问于 2013-11-15 19:27:28
回答 2查看 3.4K关注 0票数 0

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

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

我们非常感谢所有的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-15 19:47:01

老实说,我可能会采取一些不同的做法。您可能会考虑添加一个额外的桌子,跟踪座位预订。类似于:

表:账户

代码语言:javascript
运行
复制
ID | First Name | Last Name | Username | Password

表:航班

代码语言:javascript
运行
复制
ID | DepartureCity | ArrivalCity | DepartureTime | Price | SeatingCapcity

表:保留

代码语言:javascript
运行
复制
ID | Account_ID | Flight_ID | SeatNumber

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

票数 1
EN

Stack Overflow用户

发布于 2013-11-15 19:50:36

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

代码语言:javascript
运行
复制
CREATE TABLE Bookings (user_id INTEGER NOT NULL, flight_id INTEGER NOT NULL);

然后,您可以通过以下方式获取给定用户的所有航班

代码语言:javascript
运行
复制
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 = ?

然后数一下给定航班的预订量

代码语言:javascript
运行
复制
SELECT count(*) FROM Flights f
  LEFT JOIN Bookings b
  WHERE f.id = ?

这种结构有几个优点:

  • 如果用户预订的航班越来越多,则不必更改模式。更改数据库的架构是一个相当复杂的、昂贵的操作。(顺便说一句:MySQL中有一个最大的列计数)
  • 您有一个点,您可以添加更多与预订有关的字段。也许你想追踪预订。
  • 它更自然地获取和添加数据。如果添加列booked_flight_1booked_flight_2等。您必须检查哪个插槽尚未被占用,当您考虑删除时,这个位置变得越来越复杂。在这里,就像运行这个一样容易 插入预订(user_id,flight_id)值(1,2)

如果必须检查给定的航班是否可用,最好使用您的程序检查这一点,并将预订插入数据库,如果是的话。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20009044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档