2014-09-03 44 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