Мне нужно сохранить трехуровневую древовидную структуру в MySQL.Перед каждым изменением дерева я куда-то копирую исходное дерево. После модификации мне нужно знать результат "diff" моей модификации.
Например, исходное дерево:
.
├── GroupA
│ ├── NodeA
│ │ └── LeafA
│ └── NodesB
└── GroupB
После моей модификации новое дерево:
.
├── GroupA
│ ├── NodeB
│ ├── NodeA
│ │ ├── LeafA
│ │ └── LeafB
│ └── NodesB
└── GroupB
Мне нужно знать:
- Еще один лист под GroupA-> NodeA
- В группе GroupA есть еще одна ветвь
И т. Д.
Итак, как лучше всего сохранить это дерево, чтобы я мог получить "diff" результат между модификациями?
Вот мое решение:
- Так как это дерево является трехуровневым деревом, я храню дерево, используя 3 таблицы.Когда мне нужно получить целое дерево, просто объедините каждую таблицу.
- Перед любой модификацией я дам дамп 3 основных таблиц в 3 временных таблицы.
- После любой модификации я могу получитьдва дерева из 3 основных таблиц и 3 временных таблиц, а затем «diff» их без какой-либо операции SQL.
Я пытался регистрировать изменения, но простой журнал операций не может обрабатывать ситуации, подобные этой:
- Добавить лист A
- Удалить лист A
- Добавить лист A
Будет 3 журнала, но на самом деле есть только одна модификация
Итак, есть ли лучшее решение?Может кто-нибудь дать мне подсказку?