http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html предоставляет алгоритм для вставки и удаления из таблицы закрытия.
Я хотел бы смоделировать подобную структуру данных, за исключением того, что у узлов может быть несколько родителей.
Данный:

Если мы удалим, [B, C]я ожидаю, что в конечном итоге:

и если мы удалим узел, Bя ожидаю, что в конечном итоге:

Однако, если вы используете авторский алгоритм для удаления ссылок или узлов, вы заметите, что это теги [D, C, 1]для удаления, что нежелательно.
Что я пробовал до сих пор
Я попытался адаптировать исходную структуру данных, добавив referencesстолбец, в котором указано, сколько способов пройти между двумя узлами. В приведенном выше примере, вы можете путешествовать от Aдо Cили через Bили через D. Идея состояла в том, чтобы при Bудалении сохранялся путь от Aк Cи счетчик ссылок уменьшался с 2 до 1. Теоретически это было хорошо, но я не мог понять, как заставить реализацию работать, и теперь мне интересно, это вообще возможно (структура данных может не содержать достаточно информации, чтобы выяснить, какие строки удалить).
Что я спрашиваю
Как бы вы адаптировали Closes Tables для поддержки нескольких родителей? Какие альтернативные структуры данных вы бы порекомендовали? https://stackoverflow.com/q/4048151/14731 содержит исчерпывающий список таких структур данных, но не ясно, какие из них поддерживают (или лучше всего подходят) несколько родителей.
referencesколонка?