将新的集对传播到表中的所有子对(PostgreSQL)

时间:2015-09-09 19:01:35

标签: sql database postgresql select triggers

我有一张类似于以下内容的表格:

serial, integer1, integer2

integer1 != integer2存在约束,而(1, 2)(2, 1)集不能共存(因为它们是相同的集合,顺序不同)。

有一种简单的方法可以让我做到以下几点:

当我插入标识符对时,它会将关系传播到每个标识符的所有其他对。例如:

开始于:

(1, 2)
(3, 4)

如果我插入(1, 3);自动制作(1, 4) (2, 4)(2, 3)。如果有一些可以执行的精选技巧会很好,但我认为它可能需要成为实际物理创建这些行的触发器。有关最佳方法的建议吗?

我希望这是超递归的。

1 个答案:

答案 0 :(得分:0)

就个人而言,我说最好的选择是创建一个表,一个表 serial 。组表就是你所说的整数1和2是A组的一部分整数2,3和4是B组的一部分。串行表将是所有"坐标"的列表。在一个组和相关的序列中。

从那里,您可以在插入,删除和更新时在组表上触发,将更改传播到序列表(禁用现在已消失的坐标或删除它们,以及然后使用 null 或默认序列创建新条目,甚至可以通过存储过程或串行表上的触发器生成。)

我与群组合作的原因是因为它可以让您更轻松地管理删除。如果你没有拆分桌子,那么从A组中移除1会很粗糙。

基本上是这样的:

  • 表整数(如果适用):整数 +其他有价值的数据
  • 表组(整数和整数之间的伪结表):整数,组
  • 表序列(整数和整数之间的实际联结表):整数,整数,串行+其他有价值的数据。所有insert和remove都应该由表组上的触发器自动完成。