Обновление дерева
От: merge  
Дата: 04.03.25 13:57
Оценка:
Есть иерархия компании с сотрудниками в базе данных.
Каждый день некое приложение берет из файла данные в таком же по сути виде, просто плоские и надо обновить структуру в базе не удалением вставкой, а только где есть изменения.
Новые добавить\удалить иза базы, изменения применить. Какие есть эффективные алгоритмы получения дифа между деревьями?

Вид данных. То есть иерархия может быть с разными уровнями вложенности

Отдел 1
Сотрудник А
Отдел 2
Сотрудник Б
Отдел 3
Сотрудник В
Отдел 4
Сотрудник Г
Отдел 5
Сотрудник Д

Re: Обновление дерева
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.03.25 13:37
Оценка:
Здравствуйте, merge, Вы писали:

M>Есть иерархия компании с сотрудниками в базе данных.

M>Каждый день некое приложение берет из файла данные в таком же по сути виде, просто плоские и надо обновить структуру в базе не удалением вставкой, а только где есть изменения.
M>Новые добавить\удалить иза базы, изменения применить. Какие есть эффективные алгоритмы получения дифа между деревьями?
Всё зависит от того, как представлены деревья.

M>Вид данных. То есть иерархия может быть с разными уровнями вложенности


  Отдел 1
    Сотрудник А
      Отдел 2
        Сотрудник Б
      Отдел 3
        Сотрудник В
         Отдел 4
           Сотрудник Г
  Отдел 5
    Сотрудник Д

Если дерево представлено в классическом реляционном виде, то всё просто:

Departments

IDName ParentID
1Отдел 1null
2Отдел 21
3Отдел 31
4Отдел 43
5Отдел 5null
Employees
IDName DepartmentID
1Сотрудник А1
2Сотрудник А2
3Сотрудник А3
4Сотрудник А4
5Сотрудник А5

Берём просто разницу между таблицами, не думая о деревьях. Вычисляется за O(N), эффективнее некуда (если у вас не хранится история изменений).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.