为一个火车订票系统设计一个数据库是一个好的方法来训练你的数据库技巧。
其中有一些需要考虑到的复杂度。
过一些需求,并且创建表格。
为这个虚构的火车订票系统提出了10个需求。
我们将把其中每个添加到entity relational diagram(实体关系图)中来表示我们的数据库。
需求一:
一个火车在一个站点出发,在一个站点停止,在旅途中可以停靠在不同的站点。
我们如何捕获这个需求。
首先,添加一个train_station(火车站点)的表格。
火车站点的表格,i像大部分的表格一样,d作为主键。
对于一个站点来说,还需要捕获什么?火车站点的名字。
需求还提到了一个火车,它代表着一个旅程。从一个地方开始,到另一个地方结束。
添加一个新的表,称为train_journey(火车旅程)。主键是id。
不确定还有什么需要存储进这个表中。但是现在是OK的。
现在这两个表格如何关联起来?一趟火车旅程能够有多个站点吗?
可以,我们在需求中看到了这点。
一个站点可以有多趟旅程吗?
可以假设能够,因为我们在构建一个火车预定系统。
如果错了,我们可以在后面改变它。
这是一个多对多的关系,所以我们需要一个joining table(连接表),名为journey_station。
外键journey_id,外键station_id。
我们如何知道火车停靠在每个站点的顺序?
这需要存储一些站点的顺序。
需求二是时间。
一趟火车旅程有一个计划的开始时间,和旅途每个站点的时间。
多辆火车可以运行在同一天。
我们如何添加这些概念,计划的开始时间,和每个站点的计划时间到流程图中?
计划的开始时间,是一辆火车离开特殊站点的时间。旅途中每个站点的时间,这是同一件事情。
需求三:
火车的频次并不是每天都是相同的。例如,在周末,火车运行的就没有那么频繁。
我们如何来捕获它。
我们需要有办法来标记一趟火车旅行是周中还是周末。
首先,一趟火车旅行是什么,我们如何来描述它?
一趟火车旅行可以称为“早上9点从纽约到波士顿”。
需要一个查找表,称为schedule。
有一些不同的车厢,例如头等,二等和经济。