2016-03-11 78 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年沒有與數據庫「玩」了。 –