航班时刻表数据库模型SQL Server

时间:2014-09-11 18:48:44

标签: sql sql-server database-design

我正在尝试在SQL Server中创建一个用于存储航班时刻表(不是实时)的数据库模型,我终于想出了2个数据库模型但很困惑,哪一个选择存储时间表。

方法:1 对于每个航班,将时刻表存储在同一列(123X56X)以及航班名称,出发时间,到达时间,来源,目的地。 (123X56X)这意味着特定航班在星期日(1),星期一(2),星期二(3),星期四(5)和星期五(6)有空。

方法:2 将航班名称,出发时间,到达时间,来源,目的地保存在一个表格中,并为日程表创建新的映射表格。

表1 - wk_days

wk_day_id   wk_day_short     wk_day_long
1              Sun             Sunday
2              Mon             Monday

表2 - flight_schedule

flight_sch_id   flight_id   src_city_id dest_city_id    Depart_tm   Arrival_tm  Duration
1                 1           1            2              6:00        8:00        2:00

表3 - flight_schedule_wk_days

flight_sch_id   wk_day_id   
1                  2           
1                  3
1                  4
2                  2
2                  3
2                  4

请建议哪一个更好?

1 个答案:

答案 0 :(得分:1)

在现实世界中,航班时刻表数据库实际上比您的任何一个示例都要复杂得多。 (稍等一下。)

回答您的问题:通常,规范化数据库方法是一个更好的主意,特别是对于事务数据库。第二种设计是标准化的。您的第一个选项让人想起旧的COBOL平面文件系统,如原始的SABRE系统。

使用规范化方法可以使查询更轻松,更高效。找出星期二飞行的航班意味着扫描并对选项1下的每条记录进行字符串分析。在选项2中,您的数据库可以使用索引来回答此问题,而无需阅读和分析每条记录。

从更广泛的角度来看,航班不仅仅是一周中某些日子特定时间的出发地和目的地。以下是现实世界航班时刻表数据库需要处理的一些事项:

  • 航班有航空公司标识符
  • 航班有一家运营商航空公司,可能与卖家不同(即“代码共享”)
  • 航班可以有多条航线(即一组号码下的多套航线和目的地)
  • 计划系统定义的航班确实包含一周中的几天,例如您的型号,但他们还需要有航班运营日期范围的开始日期和结束日期。

根据您的应用程序的用途,您可能需要考虑其中的部分或全部内容。