【发布时间】:2015-03-01 06:05:28
【问题描述】:
数据如下所示:
未排序的对(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)吗?
【问题讨论】:
-
第一个查询有什么问题?您打算使用哪个 DBMS?后格雷斯?甲骨文?
-
您可能想尝试用英语提问。第一个样本和第二个样本有什么区别?我没有看到一个。我看到对“X”和“Y”的引用没有指定为“X”或“Y”的任何属性。我还看到了一个理论例子,它让人们很难理解你所面临的真正问题。在经验中,很少有人提出一个真正代表他们所面临的实际问题的理论例子。因此他们得到了错误的解决方案。
-
这两个样本没有区别。两个样本代表相同的数据,但方式不同。
-
@a_horse_with_no_name Postgres 可能。
-
您可以将这两个位置存储在一个数组列中并使用
'b' = any(x)来搜索它(甚至可以通过索引来支持)。但是,使用数组有很多缺点:你不能有外键,而且如果你还单独访问每个位置,这也可能会变得丑陋。我不确定这是否真的是一个可行的解决方案。另外:我仍然没有看到第一个查询的问题。
标签: sql mongodb postgresql database-design