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

在sql数据库中存储未排序对的更好方法,sql,mongodb,postgresql,database-design,Sql,Mongodb,Postgresql,Database Design,数据如下所示: A B 4 A C 13 B A 4 B C 1 C A 13 C B 1 未排序对(x,y)(两个位置)+值(这两个位置之间的距离) 我的问题是,在SQL数据库中保存这些数据的最佳方法是什么?我可以保持原样(未分类)。然后,如果我想确定点B距离数据库的其他位置有多远(换句话说,包含B的每对的值),我需要查看两列(假设它们的名称是x和y) 另一方面,如果我保持这样: A B 4 A C 13 B A 4 B C 1 C A 13 C B 1 那么我的问题很简单 select

数据如下所示:

A B 4
A C 13
B A 4
B C 1
C A 13
C B 1
未排序对
(x,y)
(两个位置)+值(这两个位置之间的距离)

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

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

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的距离相同,如果考虑单行道或其他原因,


另一方面,如果考虑到距离,则可能需要考虑空间数据类型,如可用。我不擅长Postgres,但发现同样的功能可以通过使用。

第一个查询有什么问题?您计划使用哪些数据库管理系统?博士后?甲骨文?你可以试着用英语问这个问题。第一个和第二个样本之间有什么区别?我没看到。我看到对“X”和“Y”的引用,但没有任何属性指定为“X”或“Y”。我还看到一个理论上的例子,让人们很难理解你所面临的真正问题。根据经验,很少有人提出一个真正代表他们所面临的真正问题的理论例子。因此,他们得到了错误的解决方案。这两个样本之间没有区别。两个样本表示相同的数据,但方式不同。@a_horse_和a_no_name Postgres可能是。您可以将这两个位置存储在一个数组列中,并使用
'b'=any(x)
来搜索它(甚至可以由索引支持)。不过,使用数组有很多缺点:您不能使用外键,而且如果您还单独访问每个位置,也可能会变得丑陋。不过,我不确定这是否真的是一个可行的解决方案。另外:我仍然不认为第一个查询有问题。
select * 
from table 
where x = B