如何存储双向关系

我正在编写一些代码来查找数据库中重复的客户详细信息。我将使用Levenshtein距离。 但是,我不确定如何存储关系。我一直在使用数据库,但从未遇到过这种情况,并想知道是否有人可以指出我正确的方向。 令我困惑的是如何存储关系的双向性。 我已经开始在下面提供一些示例,但想知道是否存在存储此类数据的最佳实践, 示例数据 id,地址 大街001号,5号 002,5 Main St. 003,5 Main Str 004,6 High Street 005,7 Low Street 006,7 Low St 建议1 customer_id1,customer_id2,relationship_strength 001,002,0.74 001,003,0.77 002,003,0.76 005,006,0.77 对这种方法不满意,因为它推断出customer_id1与customer_id2之间的单向关系。当然,除非我双向包含所有关系,但这会使处理时间和表的大小加倍。 例如,需要包括:002,001,0.74 建议2 customer_id,grouping_id 001,1 002,1 003,1 005,2 006,2     
已邀请:
我们这里有一个图表,其中每个节点与每个其他节点有一个关系(编辑距离)。这不在正常的数据模型范围内。它也不是数据库的永久特性(假设您解决导致重复数据的业务流程),因此不值得为最适合关系理论的解决方案而汗流。背。我们需要的是一个实用的解决方案。 把它想象成一个矩阵。如果我们进行最佳处理,我们将不执行重复的评分。所以我们对所有其他地址得分地址1,我们对地址2除了地址1以外的所有其他地址得分,我们对地址3除了地址1和2以外的所有其他地址等等。我们最终得到的是一点像一个足球联赛表:
          addr  
          1    2     3    4     5
addr
  1       -   95    95   80    76 
  2       -    -   100   75    72
  3       -    -     -   75    72
  4       -    -     -    -    83
  5       -    -     -    -     -
这些数据最好存储在建议1,即
ID1, ID2, SCORE
表中。虽然我们确实需要透视数据以使输出看起来像:) 在一个合适的联赛表中,有两组得分 - Home和Away - 所以桌子是对称的。但这不适用于此,因为
1 > 2
的编辑距离与
2 > 1
相同。但是,如果结果集包含镜像分数,它将使查询结果更直接。也就是说,对于记录
(1,5,76)
(2,5,72)
等,我们生成记录
(5,1,76)
(5,2,72)
。这可以在评分过程结束时完成。
          addr  
          1    2     3    4     5
addr
  1       -   95    95   80    76 
  2      95    -   100   75    72
  3      95  100     -   75    72
  4      80   75    75    -    83
  5      76   72    72   83     -
当然,这主要是表现性的东西,所以它只需要用于显示目的,例如,将数据导出到电子表格。我们仍然可以以可读的方式获得地址5的所有分数,而无需使用简单的SQL语句来评分分数:
select case when id1 = 5 then id1 else id2 end as id1
       , case when id1 = 5 then id2 else id1 end as id2 
       , score
from   your_table
where  id1 = 5 
or     id2 = 5
/
    
在关系系统中处理对称关系的方法如下: 选择存储对称对的规范形式,例如, customer_id1< customer_id2。 将视图SYMM_TBL定义为select id1,id2,... from ... UNION选择id2作为id1,id1作为id2,... FROM ... 在查询此视图时,体面系统不应该在性能区域惩罚您。     
一如既往,它取决于您在计算数据后要对数据执行的操作。 假设它只是识别或找到重复项,那么你的建议1就是我使用的,即第二个表只是存储对和优势。我唯一的建议是使强度为缩放整数而不是小数。     

要回复问题请先登录注册