2014-09-03 49 views
0

我有一個我已經做的GPS android應用程序。它使用SD卡上的SQLite數據庫來存儲位置數據。我正在嘗試編制數據庫的ERD(實體關係圖)。這是我遇到問題的地方。數據庫有一個軌道主表和一個航點組(一個或多個航點的集合)。這些表格中沒有位置數據,只有軌道或航點組的名稱,開始/停止時間和日期以及uid。對於這些表中的每一行,都會創建一個包含經度和緯度信息的新表。在子表中,每行都是一個點或頂點。子表名稱是「master」表格的uid,加上traks或waypoints的「t_」或「w_」。這是我想出了利用https://www.draw.io未知數量的表的SQLite圖ERD

http://s10.postimg.org/usqsrwjmx/Untitled_Diagram.png

(抱歉,我沒有10個代表處點後的圖像,笑)

我認爲表之間的組成環節是正確的因爲只有在主表中有一行時才存在子表。如果主行被刪除,相應的子表也被刪除。但是如何顯示主表中每一行都有一個子表?這也有點奇怪,因爲表名不提供此功能,所以在子表中不需要FK。

我不認爲我想在這麼晚的時候更改我的數據庫結構,因爲應用程序很快會被髮送出去進行測試,但是我會對這個問題的其他數據庫設計感興趣。

回答

0

在關係數據庫中,數據是鏈接的。然而,在你的數據庫中,不僅數據被鏈接,而且數據也與表名相關聯。因此你將內容與結構混合在一起。

就我所知,您不能在ERD中顯示此內容。你不能在你的dbms中正確地實現它(例如,你的dbms知道結構並幫助你適當的約束)。

您沒有正確使用您的RDBMS。所以,儘管遲到的日期:如果我在你的位置,我會改變成適當的關係數據庫模型。

編輯:一個適當的關係模型只需要有一個一個 track_detail表中的一個列中的曲目ID,而不是它的名字。與主航路點ID相同的waypoint_detail。實際上沒有大的改變。

+0

感謝您的反饋Thorsten。好的,只是爲了確保我明白你的觀點。我應該有一個包含所有軌道頂點的表格(對於所有軌道),那麼FK就是「主」軌道的用戶。是的,我可以看到。擁有一張巨大的表的任何性能問題,可能包含幾十萬條記錄,而不是每個記錄有幾千條記錄的許多表? – fallingdog 2014-09-03 23:10:37

+0

另外,我不確定我現在看到了我的缺陷。我想如果應用程序將來需要將數據外部的數據傳遞給「真正的」RDBMS系統,那麼風險就會是這樣。這是一個真正的風險,因爲他們有一個oracle數據庫和一個esri SDE以及...... – fallingdog 2014-09-03 23:18:52

+0

我不認爲幾十萬條記錄很大。這就是dbms的全部內容:儘可能快地找到合適的記錄。通過應用FK約束和索引,dbms可以輕鬆找到獲取數據的最佳方法。這應該不成問題。 – 2014-09-04 06:06:19