4

我需要遍历并更新 SQL 中的图形。

为了将其纳入预期,我将举一个例子:

  • 每个公司都可以在特定主题上代表其他公司。
  • 公司可以相互代表,但不能代表同一主题

这假设表格如下:

companies(id), representations(source_id, destination_id, subject).

但规则是,当我的公司不再代表您的公司处理特定主题时,我的下游公司就不能代表我的公司处理同一主题。

我希望你明白我的意思。

因此,使用简单的数据,例如:

C1:
--sell--> C2
--pay--> C3

C2:
--sell--> C3
--pay--> C1

C3:
--mail--> C1
--sell--> C4

C4:
--deliver-->C1

现在,我们删除表示(我应该称之为关系)C2--sell-->C3我们应该最终得到以下结构([X]- 删除):

C1:
--sell--> C2
--pay--> C3

C2:
[X]--sell--> C3
--pay--> C1

C3:
--mail--> C1
[X]--sell--> C4

C4:
--deliver-->C1

所以问题是如何才能选择所有的公司,这些公司在我的链下为一个给定的主题?

我想递归 CTE 表达式是唯一的方法。

笔记:

  • 该结构不是一棵树,它是一个有序循环图。
  • 图形数据库现在不是一个选项(这只是系统的一小部分)
  • 更新不需要立即进行,它们最终保持一致是可以的(大约几秒钟到几分钟)。
4

1 回答 1

3

听起来您需要为每个主题维护图形的传递闭包。看一篇关于如何使用 SQL 实现增量评估系统 (IES) 的论文,似乎能够做到这一点。该论文包含有向无环、无向和任意有向图的大量 SQL 示例。

看来,对于您的每个主题,图表都是无环的,幸运的是,这是最简单的情况。

于 2012-08-15T07:34:55.907 回答