2016-03-11 47 views
1

我不是数据库专家,我只是构建原型应用程序,所以没有什么是非常重要的。如何创建线条/停止关系

无论如何,该应用是关于一个地铁:这个地铁有许多行,有时一些站都共享线之间(因此,例如,停止线2,7的3点4被停止和9)。

所以,我做了一个SQLite stops表:

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

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

任何建议表示赞赏,并为真正的noob问题抱歉。

+0

我强烈反对CSV的想法。 –

+0

@TimBiegeleisen:我在这里只是想听听其他想法:-) –

回答

1

我会保持它的简单和使用具有表lines用于线路(如name)的ID(主键)与其它元数据一起:

线

(id, name) 

然后,创建一个表中为停止:

停止

(id, name) 

最后,你可以创建一个桥接表将与站连接线:

(lineId, stopId) 

bridge表中每个记录代表一个线有一个给定的停止。

请注意,使用CSV代表具有多个停止线的行完全是而不是这里的方法,因为它会使您的关系数据库的权力无用。

更新:

如果你想记录停止在给定线的位置(并假设立场将跨线不同),你可以使用下表:

stopNumbers

(lineId, stopId, stopPosition) 

停车位置可以通过知道线路ID和停车位ID来获得。

1

你需要一个多对一对多的关系,这是存储在一个单独的表是这样的:

table lines_to_stops 
line_fk 
stop_fk 

这是关系世界...

注意,在数据库中记录不以任何特定的顺序。如果你需要把停到任何特定的顺序(你最有可能做的),你必须保存这个命令到数据库,以及:

table lines_to_stops 
line_fk 
stop_fk 
order_in_line 
+0

我知道记录不是按特定的顺序,当然;-)此外,你不能改变自动增量字段的ID,所以如果他们删除或添加一个停止线,如果你没有其他领域,你可以很容易地拉你的头发。对不起,这个简单的问题,但是我已经超过10年没有与数据库“玩”了。 –