在sql数据库中存储未排序对的更好方法

时间:2015-01-02 23:41:25

标签: sql mongodb postgresql database-design

数据如下所示:

未排序的对(x,y)(两个位置)+值(这两个位置之间的距离)

A B 4
A C 13
B C 1

我的问题是将它保存在SQL数据库中的最佳方法是什么?我可以保持原样(未分类)。然后,如果我想确定B点与数据库中每个其他位置的距离(换句话说,每个包含B的对的值),我需要查看两列(让我们假设它们的名称是x和{ {1}})。

y

另一方面,如果我保持这样:

select * 
from table 
where x = B or y = B

然后我的查询很简单

A B 4
A C 13
B A 4
B C 1
C A 13
C B 1

但数据的大小是其两倍。还有其他想法吗?任何其他技术(mongodb)?

1 个答案:

答案 0 :(得分:2)

如果这真的是关于位置和距离,而不只是一个假设的例子,我觉得按照第二种情况中提到的方式存储数据是有意义的,因为在现实世界中,从A到B的距离不是如果考虑单向道路或其他原因,必须与从B到A的距离相同。

另一方面,如果您将距离视为"as the crow flies",则可能需要将空间数据类型视为可用natively in SQL Server。我对Postgres并不擅长,但发现this extender可以获得同样的效果。