如何创建线/停止关系

时间:2016-03-11 09:28:25

标签: sqlite database-design

我不是数据库专家,我只是在构建一个原型应用程序,所以没什么特别重要的。

无论如何,该应用程序是关于地铁:这条地铁有很多线路,有时一些站点之间的共享(例如,第3和第4站是第2,7和第7行的站点9)。

所以,我编写了一个SQLite stops表:

    +---------+-------------+------+
    | Field   | Type        | Auto | 
    +---------+-------------+------+
    | id      | integer     | YES  |
    | name    | varchar(20) | NO   |
    | lines   | ?           | NO   |         
    +---------+-------------+------+

处理共享停靠的最佳方法是什么?我的想法是创建一个lines表,然后在stops表的行字段中放入逗号分隔的lines.id列表。我不知道为什么,但我觉得可能有更好的方法。

任何建议都表示赞赏,对于真正的noob问题感到抱歉。

2 个答案:

答案 0 :(得分:0)

您需要一个多对多关系,它存储在一个单独的表中:

table lines_to_stops
line_fk
stop_fk

那是关系世界......

请注意,数据库中的记录没有任何特定顺序。如果您需要将止损设置为任何特定的顺序(您最有可能这样做),您还必须将此顺序存储到数据库中:

table lines_to_stops
line_fk
stop_fk
order_in_line

答案 1 :(得分:0)

我会保持简单,并使用一个表lines,它有一个ID(主键)以及一行的其他元数据(例如name):

<强>线

(id, name)

然后,为停靠点创建一个表:

<强>停止

(id, name)

最后,您可以创建一个桥接表来连接带有停靠点的行:

<强>桥

(lineId, stopId)

bridge表中的每条记录代表一条具有给定止损的行。

请注意,使用CSV表示具有多个停靠点的行完全这里的方式,因为它会使关系数据库的功能无效。

<强>更新

如果要记录给定行中止损的位置(并假设各行的位置不同),可以使用下表:

<强> stopNumbers

(lineId, stopId, stopPosition)

可以通过知道线路的ID和停靠点ID来获取停止位置。