2010-06-03 65 views
0

我有限的SQL背景,基本上是通過HTML進行的少量操作,主要是使用預先存在的數據庫。我想要做的是建立一個數據庫,它將存儲公交路線的時間信息。所以基本上我有不同的路線,每條路線都有停靠站,然後有一個公交車到達每站的時間列表。下面是他們網站上的時間表示例:LinkSQLite入門(Android)

我想知道什麼是最好的方式來佈局我的數據庫/表?

此外,每個表中_id字段的用途是什麼?

謝謝, 搶!

P.S.對不起,如果我對這個問題的知識缺乏導致我發佈重複問題。

+0

_id只是一個獨特的ID號碼的條目,這在某些事情中並不重要,但是在其他條件下應該總是包含在內。它也有助於跟蹤記錄,因爲其他字段可能被複制,但從來沒有識別號碼 – HXCaine 2010-06-03 21:15:53

回答

1

你問了兩個問題:

  1. 的 'ID' 字段作爲一個獨特的行標識是一個很好的約定。這不是嚴格要求的,有些數據每行都有自己唯一的序列號,而是使用該序列號。程序通常希望通過唯一的行標識查找整個記錄,所以該字段應該是主鍵。創建id的常用子句是「id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id)」。每當添加新記錄時,都會自動分配一個唯一的ID。有關詳細分解,請參見Tizag's MySQL Tutorial。就個人而言,這些「_id」有些名稱,例如「route_id」,「bus_id」和您的風格可能會有所不同。

  2. 佈置你的數據取決於你想要做什麼。我的猜測是,對於每條公共汽車路線,您想在一段時間後在特定停靠點找到下一輛公共汽車,然後在該公共汽車到達下一站時。每條路線有多個站點;路線之間可能會共享一站;路線在白天跳過一些站點而變化;路線走向兩個方向;等等。我會添加一個公交車從頭到尾跑過的'跑'的抽象。

我在鋪設了第一個猜測是:

的公共汽車路線有一個總線名稱,號碼和其他信息:「#1紅」,「南部和西部」,「SF牟尼「,」map:// ...「

止損具有獨特的名稱和其他信息:‘’。‘北方大商場南’,‘在櫻桃,盛大大道以西’

一個運行有線路編號的天。一週,一個方向,可能是當天那個方向的跑步序列號,也許是跑步的開始/停止時間:「63(紅色的#1路線ID)」,「反向」,「MTWRF」(平日) ,「2」(第2次),「7:00」,「7:36」。

然後你有一個時間表「Run_id」,「Stop_id」,「Stop Sequence Number」,「Time」。

寫出你的計劃模式,然後開始嘗試t o寫他們的模式。不要驚訝於多個連接「SELECT * from Schedule as S,Run as R,Bus as B for B ... WHERE B.id == R.bus_id and S.run_id == R.id and B .id =(請求的總線)和S.time> = now()和....「在它工作之後,您的性能會非規範化。

這就是我的全部免費建議。 :)

2

id字段爲每行提供一個唯一的ID,可由數據庫中的其他表引用。當它以這種方式引用時,它被稱爲外鍵。這可以讓你有一個表格提供關於說一個學生的詳細信息(姓名,地址等),然後在另一個表中討論關於班級成員的唯一參考。

佈局數據庫通常有很多種不同的方式,最好的方式取決於你想要對數據做什麼。這個設計大部分並不是SqlLite獨有的,所以在一般情況下閱讀關係數據庫可能是值得的。

路由表:

一個奠定它從你的具體實例的方式ID,名稱

停止表:ID,名稱

時間表:ID,外鍵航線,外鍵停止