我正在尝试在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
请建议哪一个更好?
答案 0 :(得分:1)
在现实世界中,航班时刻表数据库实际上比您的任何一个示例都要复杂得多。 (稍等一下。)
回答您的问题:通常,规范化数据库方法是一个更好的主意,特别是对于事务数据库。第二种设计是标准化的。您的第一个选项让人想起旧的COBOL平面文件系统,如原始的SABRE系统。
使用规范化方法可以使查询更轻松,更高效。找出星期二飞行的航班意味着扫描并对选项1下的每条记录进行字符串分析。在选项2中,您的数据库可以使用索引来回答此问题,而无需阅读和分析每条记录。
从更广泛的角度来看,航班不仅仅是一周中某些日子特定时间的出发地和目的地。以下是现实世界航班时刻表数据库需要处理的一些事项:
根据您的应用程序的用途,您可能需要考虑其中的部分或全部内容。