在 sql 数据库中存储未排序对的更好方法
Better way to store unsorted pairs in sql database
数据如下所示:
未排序对(x,y)
(两个位置)+值(这两个位置之间的距离)
A B 4
A C 13
B C 1
我的问题是将其保存在 SQL 数据库中的最佳方法是什么?我可以保持原样(未分类)。然后,如果我想确定点 B 与数据库中每个其他位置的距离(换句话说,每对包含 B 的值),我需要查看两列(假设它们的名称是 x
和 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
那我的查询就简单了
select *
from table
where x = B
但是数据量是原来的两倍。还有其他想法吗?还有其他技术(mongodb)吗?
如果这真的是关于位置和距离,而不仅仅是一个假设的例子,我觉得像第二种情况中提到的那样存储数据是有意义的,因为在现实世界中,从 A 到 B 的距离如果考虑单行道或其他此类原因,则不一定必须与B到A的距离相同。
另一方面,如果您认为距离为 "as the crow flies", you might want to consider Spatial Data Types, as available natively in SQL Server. I am no good with Postgres, but find that the same is available through this extender。
数据如下所示:
未排序对(x,y)
(两个位置)+值(这两个位置之间的距离)
A B 4
A C 13
B C 1
我的问题是将其保存在 SQL 数据库中的最佳方法是什么?我可以保持原样(未分类)。然后,如果我想确定点 B 与数据库中每个其他位置的距离(换句话说,每对包含 B 的值),我需要查看两列(假设它们的名称是 x
和 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
那我的查询就简单了
select *
from table
where x = B
但是数据量是原来的两倍。还有其他想法吗?还有其他技术(mongodb)吗?
如果这真的是关于位置和距离,而不仅仅是一个假设的例子,我觉得像第二种情况中提到的那样存储数据是有意义的,因为在现实世界中,从 A 到 B 的距离如果考虑单行道或其他此类原因,则不一定必须与B到A的距离相同。
另一方面,如果您认为距离为 "as the crow flies", you might want to consider Spatial Data Types, as available natively in SQL Server. I am no good with Postgres, but find that the same is available through this extender。