【问题标题】:Better way to store unsorted pairs in sql database在 sql 数据库中存储未排序对的更好方法
【发布时间】:2015-03-01 06:05:28
【问题描述】:

数据如下所示:

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

A B 4
A C 13
B C 1

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

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多