http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html fornece um algoritmo para inserir e excluir de uma tabela de fechamento.
Eu gostaria de modelar uma estrutura de dados semelhante, exceto que os nós podem ter vários pais.
Dado:

Se removermos [B, C], espero terminar com:

e se removermos o nó B, espero terminar com:

No entanto, se você usar o algoritmo do autor para remover links ou nós, notará que ele marca [D, C, 1]para exclusão, o que é indesejável.
O que eu tentei até agora
Tentei adaptar a estrutura de dados original adicionando uma referencescoluna que indica quantas maneiras existem para viajar entre dois nós. No exemplo acima, você pode viajar de Apara Catravés Bou através D. A idéia seria que, quando Bremovida, o caminho de Apara Cé mantido e a contagem de referência diminui de 2 para 1. Foi legal em teoria, mas não consegui descobrir como fazer a implementação funcionar e agora me pergunto se é possível (a estrutura de dados pode não conter informações suficientes para descobrir quais linhas remover).
O que estou perguntando
Como você adaptaria as tabelas de fechamento para apoiar vários pais? Quais estruturas de dados alternativas você recomendaria? https://stackoverflow.com/q/4048151/14731 contém uma lista exaustiva dessas estruturas de dados, mas não está claro quais suportam (ou são melhores para) vários pais.
referencescoluna?