Vic*_*sig 7 mysql schema database-design
我对 MySQL 数据库模式对于火车时刻表的外观感兴趣。
通常,这以表格形式呈现为最终结果。
Train No. 11111 22222 11111
Train Day Mo-Fr Sat Sun
Station A d 06.00 07.00 07.00
Station B d 06.10 07.10
Station C d 06.20 07.15
Station D a 06.30 07.40
Station D d 06.35 07.25
Station E d 06.45 07.45
Run Code Online (Sandbox Code Playgroud)
所以每列火车都有一个火车编号,但这不是唯一的,因为该编号将在周一至周五到周六和周日重复。然后一列火车会停在多个车站,但不是所有车站,有时车站需要到达 (a) 和出发 (d) 时间,或其中之一。
车站可以按距离排序。
到目前为止,我认为我需要表格:
这是否足够规范化?
我会强烈考虑明确存储特定计划实际运行的所有日子。这将给出一个看起来像这样的结构:

通过这样做,您可以更轻松地回答诸如“10 月 1 日前往 X 站的所有火车是什么?”等问题。当火车没有运行(例如圣诞节)时,它还可以识别“临时间隔”。一次性火车现在只是在 SCHEDULE_DAYS 中只有一个条目的火车。
由于周末和工作日的日程安排可能不同,我认为最好每天都有单独的行。如果您需要这样做,这允许链接一周中每一天的不同时间表。
您可以通过设置首次运行和终止(不再运行的第一个日期)的日期字段来处理一次性运行。这也将允许您处理日程安排的更改。首次运行日期成为主键的一部分。您可能需要此表上的关系表的代理主键。
我会考虑将一周中的几天分成七个单独的指标字段。这使您可以灵活地处理仅在一周中的某些日子运行的计划。火车站与车站的关系可以简化为(火车、车站、类型(到达/出发)一天中的时间)。音符可以根据它们的密度进入单独的关系。