powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Отслеживание изменений в древовидной структуре
13 сообщений из 13, страница 1 из 1
Отслеживание изменений в древовидной структуре
    #36886057
Рустем1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть типовая структура дерева описанная в таблице:

ID - уникальный идентификатор
P_ID - определение parents (связь с идентификатором)
NAME - обычное поле с названием ветки.
+ дополнительные поля по датам создания статус активности и т.д.

Тут возникает необходимость в отслеживании изменений - сохранение версий древовидной структуры, чтобы на определенный момент времени можно было смотреть версию предыдущих изменений, при условии что структура дерева будет выглядеть так же со старыми данными, без учета новых данных.


Я предполагал, что в данной таблице можно внести дополнения, которые хранят статус ветки (активный/неактивный), дату создания и дату удаления, и по условиям периода отображать состояние, но может есть уже другие схемы, более "качественные" чтоли?

Заранее благодарен за советы
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36886194
Фотография bootty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что может меняться в вашей структуре? P_ID может измениться? Название, статусы и т.п.? Или только добавление новых узлов?
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36886261
Рустем1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boottyЧто может меняться в вашей структуре? P_ID может измениться? Название, статусы и т.п.? Или только добавление новых узлов?


Изменения в структуре дерева - добавление новых "веток", удаление существуюущих. И наверное самое сложное в части сохранения изменений - перемещение группы "веток" из одного "подчинения" в другое.
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36886514
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое сделать 2 доп таблицы: версии дерева (код версии, дата начала действия версии, дата конца действия) и элементы дерева версии(код версии, код элемента дерева). МОжно вообще обойтись только таблицей с версиями дерева и в таблице, где хранится дерево для каждого элемента дерева делать ссылку на номер версии.
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36886522
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и делать так: поменял дерево как надо (хоть в течении двух дней), а потом нажимаешь кнопку - сформировать версию и она формирует уже те таблицы, про которые я писал и ставит для прошлой версии дату окончания действия. После этого система уже должна начать работать с данными из нового дерева где еще нет даты окончания действия...
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36886960
Рустем1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShtockНу и делать так: поменял дерево как надо (хоть в течении двух дней), а потом нажимаешь кнопку - сформировать версию и она формирует уже те таблицы, про которые я писал и ставит для прошлой версии дату окончания действия. После этого система уже должна начать работать с данными из нового дерева где еще нет даты окончания действия...


Спасибо, вполне хорошая реализация... попробую ее создать. Но я так понимаю в таблицах формируется массив только по измененным веткам и только по ним формируются версии, а те ветки которые были не тронуты (или не входили во вложение измененных веток) остаются без указания (или изменения) версии?
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36887084
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы хранил ВСЕ ветки, которые входят в эту версию. Место может быть не так экономно расходуется, но зато быстро селекты писать. Хотя конечно зависит от того, как часто будут меняться данные в дереве.
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36887093
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рустем1978,

Нужны просто нормальные версии строк.

Идея следующая.
Таблица меняется:
Код: plaintext
1.
2.
3.
4.
5.
6.
VER - уникальный идентификатор
P_VER - определение parents
ID - идентификатор (для клиента)
P_ID - определение parents (для клиента)
DATE_FROM - начало срока действия
DATE_TO - конец срока действия
При любом изменении создаётся новая строка, для предыдущей устанавлевается DATE_TO в текущую дату, все P_VER для текущих записей переустанавливаются со старой на новую

Всё, что работает с деревом, ссылается на ID, на любой момент времени можно получить версию дерева, просто задав фильтр по датам.

Это общая идея, нужно конечно правильно спроектировать, обеспечить ссылучную целостность...
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36887116
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgРустем1978,

Нужны просто нормальные версии строк.

Идея следующая.
Таблица меняется:
Код: plaintext
1.
2.
3.
4.
5.
6.
VER - уникальный идентификатор
P_VER - определение parents
ID - идентификатор (для клиента)
P_ID - определение parents (для клиента)
DATE_FROM - начало срока действия
DATE_TO - конец срока действия
При любом изменении создаётся новая строка, для предыдущей устанавлевается DATE_TO в текущую дату, все P_VER для текущих записей переустанавливаются со старой на новую

Всё, что работает с деревом, ссылается на ID, на любой момент времени можно получить версию дерева, просто задав фильтр по датам.

Это общая идея, нужно конечно правильно спроектировать, обеспечить ссылучную целостность...Нет, не совсем правильно

P_VER не нужен, ссылки будут по ID, P_ID в нужном диапазоне дат.
Т.е. при любом изменении создаётся новая строка, для предыдущей устанавливается DATE_TO в текущую дату.
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36887215
Рустем1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
P_VER не нужен, ссылки будут по ID, P_ID в нужном диапазоне дат.
Т.е. при любом изменении создаётся новая строка, для предыдущей устанавливается DATE_TO в текущую дату.


Это по сути дополнения в той же таблице описывающей структуру дерева без выноса данных в отдельный табличный массив?
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36887407
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рустем1978alexeyvg
P_VER не нужен, ссылки будут по ID, P_ID в нужном диапазоне дат.
Т.е. при любом изменении создаётся новая строка, для предыдущей устанавливается DATE_TO в текущую дату.
Это по сути дополнения в той же таблице описывающей структуру дерева без выноса данных в отдельный табличный массив?Ну да.

Пути нужно выбирать исходя из бизнес-задачи. Пока она не раскрыта.

Для логирования действий пользователя лучьше писать лог изменений.
Для просмотра - "а какое было дерево на такой-то день" - лучьше делать ежедневные копии дерева в другую таблицу.
Для полноценной версионности (типа ведёшь мышкой по линии времени, а дерево на глазах менется) нужен тот способ, о котором я расскзал.
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36888533
Фотография bootty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, мне тоже думается, что для ТС проще будет пользоваться структурой от alexeyvg, а именно типа
Код: plaintext
1.
2.
3.
4.
VER - уникальный идентификатор
ID - идентификатор (для клиента)
P_ID - определение parents (для клиента)
DATE_FROM - начало срока действия
DATE_TO - конец срока действия
...
Рейтинг: 0 / 0
Отслеживание изменений в древовидной структуре
    #36892890
Рустем1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boottyДа, мне тоже думается, что для ТС проще будет пользоваться структурой от alexeyvg, а именно типа
Код: plaintext
1.
2.
3.
4.
VER - уникальный идентификатор
ID - идентификатор (для клиента)
P_ID - определение parents (для клиента)
DATE_FROM - начало срока действия
DATE_TO - конец срока действия


Спасибо за советы! Я буду пробовать эту реализацию. Если возникнет вопрос по ней, думаю не откажете в возможности снова задать в этой теме вопросы.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Отслеживание изменений в древовидной структуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]