我不是数据库专家,我只是在构建一个原型应用程序,所以没什么特别重要的。
无论如何,该应用程序是关于地铁:这条地铁有很多线路,有时一些站点之间的共享(例如,第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问题感到抱歉。
答案 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来获取停止位置。