Sqlite 如何创建行/站关系

Sqlite 如何创建行/站关系,sqlite,database-design,Sqlite,Database Design,我不是一个数据库专家,我只是在构建一个原型应用程序,所以没有什么真正重要的 无论如何,该应用程序是关于一条地铁的:这条地铁有很多线路,有时一些站点在线路之间共享(例如,3号站和4号站是2号线、7号线和9号线的站点) 因此,我创建了一个SQLitestops表: +---------+-------------+------+ | Field | Type | Auto | +---------+-------------+------+ | i

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

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

因此,我创建了一个SQLite
stops
表:

    +---------+-------------+------+
    | Field   | Type        | Auto | 
    +---------+-------------+------+
    | id      | integer     | YES  |
    | name    | varchar(20) | NO   |
    | lines   | ?           | NO   |         
    +---------+-------------+------+
处理共享站点的最佳方式是什么?我的想法是创建一个
表,然后在
停止
表的行字段中放置一个以逗号分隔的
行列表。id
。我不知道为什么,但我觉得还有更好的办法


非常感谢您的任何建议,对于真正的noob问题,我们深表歉意。

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

table lines_to_stops
line_fk
stop_fk
这就是关系世界

请注意,数据库中的记录不是按任何特定顺序排列的。如果您需要将站点放入任何特定的顺序中(您很可能会这样做),您还必须将此顺序存储到数据库中:

table lines_to_stops
line_fk
stop_fk
order_in_line

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

table lines_to_stops
line_fk
stop_fk
这就是关系世界

请注意,数据库中的记录不是按任何特定顺序排列的。如果您需要将站点放入任何特定的顺序中(您很可能会这样做),您还必须将此顺序存储到数据库中:

table lines_to_stops
line_fk
stop_fk
order_in_line

我将保持它的简单性,并使用一个表
,该表具有一个ID(主键)以及行的其他元数据(例如
名称
):

(id, name)
(id, name)
(lineId, stopId, stopPosition)
然后,为站点创建一个表:

停止

(id, name)
(id, name)
(lineId, stopId, stopPosition)
最后,您可以创建一个桥接表,该桥接表将线路与站点连接起来:

桥牌

(lineId, stopId)
bridge
表中的每条记录代表一条具有给定停止点的行

请注意,使用CSV表示具有多个停止点的行在这里完全不是一种方法,因为它会使关系数据库的功能变得毫无用处

更新:

如果要记录给定线路中的停车点位置(并假设各线路的位置不同),可以使用下表:

站点编号

(id, name)
(id, name)
(lineId, stopId, stopPosition)

可以在知道行ID和停止ID的情况下获得停止位置。

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

(id, name)
(id, name)
(lineId, stopId, stopPosition)
然后,为站点创建一个表:

停止

(id, name)
(id, name)
(lineId, stopId, stopPosition)
最后,您可以创建一个桥接表,该桥接表将线路与站点连接起来:

桥牌

(lineId, stopId)
bridge
表中的每条记录代表一条具有给定停止点的行

请注意,使用CSV表示具有多个停止点的行在这里完全不是一种方法,因为它会使关系数据库的功能变得毫无用处

更新:

如果要记录给定线路中的停车点位置(并假设各线路的位置不同),可以使用下表:

站点编号

(id, name)
(id, name)
(lineId, stopId, stopPosition)

知道线路ID和站点ID可以获得停止位置。

我强烈反对CSV想法。@TimBiegeleisen:我来这里只是为了听其他想法:-)我强烈反对CSV想法。@TimBiegeleisen:我来这里只是为了听其他想法:-)我知道记录没有特定的顺序,当然;-)此外,您不能更改自动增量字段的id,因此,如果他们删除或添加一个线的止动块,如果您没有其他字段,您很容易就会拉长头发。很抱歉问这么简单的问题,但我已经10多年没有“玩”过数据库了。当然,我知道记录不是按特定顺序排列的;-)此外,您不能更改自动增量字段的id,因此,如果他们删除或添加一个线的止动块,如果您没有其他字段,您很容易就会拉长头发。很抱歉问这么简单的问题,但我已经10多年没有“玩”过数据库了。