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

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

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

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


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

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


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


Спасибо, вполне хорошая реализация... попробую ее создать. Но я так понимаю в таблицах формируется массив только по измененным веткам и только по ним формируются версии, а те ветки которые были не тронуты (или не входили во вложение измененных веток) остаются без указания (или изменения) версии?
...
Рейтинг: 0 / 0
07.10.2010, 13:48
    #36887084
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отслеживание изменений в древовидной структуре
Я бы хранил ВСЕ ветки, которые входят в эту версию. Место может быть не так экономно расходуется, но зато быстро селекты писать. Хотя конечно зависит от того, как часто будут меняться данные в дереве.
...
Рейтинг: 0 / 0
07.10.2010, 13:51
    #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
07.10.2010, 13:56
    #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
07.10.2010, 14:27
    #36887215
Рустем1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отслеживание изменений в древовидной структуре
alexeyvg
P_VER не нужен, ссылки будут по ID, P_ID в нужном диапазоне дат.
Т.е. при любом изменении создаётся новая строка, для предыдущей устанавливается DATE_TO в текущую дату.


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

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

Для логирования действий пользователя лучьше писать лог изменений.
Для просмотра - "а какое было дерево на такой-то день" - лучьше делать ежедневные копии дерева в другую таблицу.
Для полноценной версионности (типа ведёшь мышкой по линии времени, а дерево на глазах менется) нужен тот способ, о котором я расскзал.
...
Рейтинг: 0 / 0
08.10.2010, 09:47
    #36888533
bootty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отслеживание изменений в древовидной структуре
Да, мне тоже думается, что для ТС проще будет пользоваться структурой от alexeyvg, а именно типа
Код: plaintext
1.
2.
3.
4.
VER - уникальный идентификатор
ID - идентификатор (для клиента)
P_ID - определение parents (для клиента)
DATE_FROM - начало срока действия
DATE_TO - конец срока действия
...
Рейтинг: 0 / 0
11.10.2010, 15:51
    #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]