在postgresql中存储对称矩阵

Dev*_*vin 5 postgresql database-design

我有几个对象之间的距离矩阵,如下所示:

Method 1
          A         B         C         D ...
A 0.0000000         .         .         .
B 0.5458965 0.0000000         .         .
C 0.9758267 0.9673959 0.0000000         .
D 0.9714434 0.9589730 0.5715958 0.0000000
...

Method 2
          A         B         C         D ...
A 0.0000000         .         .         .
B 0.1063699 0.0000000         .         .
C 0.4997017 0.4857148 0.0000000         .
D 0.4968287 0.4752771 0.0639429 0.0000000
...

Method 3
...
Run Code Online (Sandbox Code Playgroud)

为了给人一种规模感,每个矩阵大约为 10,000 x 10,000,我有五种不同的距离计算方法。

我还有一个 Postgres 数据库,其中有一个表存储有关对象 A、B、C、D 等的信息,因此我正在专门研究 SQL 解决方案。

假设用户在我的应用程序中选择对象 B。然后,我显示与 B 最接近的对象的表格。由于距离矩阵具有不同的尺度,因此我将这些值转换为排名,并使用排名的平均值对结果进行排序。

存储这些数据的有效方法是什么?明显的方法是这样的:

method obj1 obj2         d
     1    A    B 0.5458965
     1    A    C 0.9758267
...
Run Code Online (Sandbox Code Playgroud)

然后,我只需查询obj1='B' OR obj2='B'、 group by method、计算rank(d)并按平均值聚合排名。对于这个问题来说,这是一个合理的模式吗?