|
|
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть типовая структура дерева описанная в таблице: ID - уникальный идентификатор P_ID - определение parents (связь с идентификатором) NAME - обычное поле с названием ветки. + дополнительные поля по датам создания статус активности и т.д. Тут возникает необходимость в отслеживании изменений - сохранение версий древовидной структуры, чтобы на определенный момент времени можно было смотреть версию предыдущих изменений, при условии что структура дерева будет выглядеть так же со старыми данными, без учета новых данных. Я предполагал, что в данной таблице можно внести дополнения, которые хранят статус ветки (активный/неактивный), дату создания и дату удаления, и по условиям периода отображать состояние, но может есть уже другие схемы, более "качественные" чтоли? Заранее благодарен за советы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 07:23 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Что может меняться в вашей структуре? P_ID может измениться? Название, статусы и т.п.? Или только добавление новых узлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 09:41 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
boottyЧто может меняться в вашей структуре? P_ID может измениться? Название, статусы и т.п.? Или только добавление новых узлов? Изменения в структуре дерева - добавление новых "веток", удаление существуюущих. И наверное самое сложное в части сохранения изменений - перемещение группы "веток" из одного "подчинения" в другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 10:11 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Самое простое сделать 2 доп таблицы: версии дерева (код версии, дата начала действия версии, дата конца действия) и элементы дерева версии(код версии, код элемента дерева). МОжно вообще обойтись только таблицей с версиями дерева и в таблице, где хранится дерево для каждого элемента дерева делать ссылку на номер версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 11:21 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Ну и делать так: поменял дерево как надо (хоть в течении двух дней), а потом нажимаешь кнопку - сформировать версию и она формирует уже те таблицы, про которые я писал и ставит для прошлой версии дату окончания действия. После этого система уже должна начать работать с данными из нового дерева где еще нет даты окончания действия... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 11:24 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
ShtockНу и делать так: поменял дерево как надо (хоть в течении двух дней), а потом нажимаешь кнопку - сформировать версию и она формирует уже те таблицы, про которые я писал и ставит для прошлой версии дату окончания действия. После этого система уже должна начать работать с данными из нового дерева где еще нет даты окончания действия... Спасибо, вполне хорошая реализация... попробую ее создать. Но я так понимаю в таблицах формируется массив только по измененным веткам и только по ним формируются версии, а те ветки которые были не тронуты (или не входили во вложение измененных веток) остаются без указания (или изменения) версии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 13:22 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Я бы хранил ВСЕ ветки, которые входят в эту версию. Место может быть не так экономно расходуется, но зато быстро селекты писать. Хотя конечно зависит от того, как часто будут меняться данные в дереве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 13:48 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Рустем1978, Нужны просто нормальные версии строк. Идея следующая. Таблица меняется: Код: plaintext 1. 2. 3. 4. 5. 6. Всё, что работает с деревом, ссылается на ID, на любой момент времени можно получить версию дерева, просто задав фильтр по датам. Это общая идея, нужно конечно правильно спроектировать, обеспечить ссылучную целостность... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 13:51 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
alexeyvgРустем1978, Нужны просто нормальные версии строк. Идея следующая. Таблица меняется: Код: plaintext 1. 2. 3. 4. 5. 6. Всё, что работает с деревом, ссылается на ID, на любой момент времени можно получить версию дерева, просто задав фильтр по датам. Это общая идея, нужно конечно правильно спроектировать, обеспечить ссылучную целостность...Нет, не совсем правильно P_VER не нужен, ссылки будут по ID, P_ID в нужном диапазоне дат. Т.е. при любом изменении создаётся новая строка, для предыдущей устанавливается DATE_TO в текущую дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 13:56 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
alexeyvg P_VER не нужен, ссылки будут по ID, P_ID в нужном диапазоне дат. Т.е. при любом изменении создаётся новая строка, для предыдущей устанавливается DATE_TO в текущую дату. Это по сути дополнения в той же таблице описывающей структуру дерева без выноса данных в отдельный табличный массив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 14:27 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Рустем1978alexeyvg P_VER не нужен, ссылки будут по ID, P_ID в нужном диапазоне дат. Т.е. при любом изменении создаётся новая строка, для предыдущей устанавливается DATE_TO в текущую дату. Это по сути дополнения в той же таблице описывающей структуру дерева без выноса данных в отдельный табличный массив?Ну да. Пути нужно выбирать исходя из бизнес-задачи. Пока она не раскрыта. Для логирования действий пользователя лучьше писать лог изменений. Для просмотра - "а какое было дерево на такой-то день" - лучьше делать ежедневные копии дерева в другую таблицу. Для полноценной версионности (типа ведёшь мышкой по линии времени, а дерево на глазах менется) нужен тот способ, о котором я расскзал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 15:23 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
Да, мне тоже думается, что для ТС проще будет пользоваться структурой от alexeyvg, а именно типа Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 09:47 |
|
||
|
Отслеживание изменений в древовидной структуре
|
|||
|---|---|---|---|
|
#18+
boottyДа, мне тоже думается, что для ТС проще будет пользоваться структурой от alexeyvg, а именно типа Код: plaintext 1. 2. 3. 4. Спасибо за советы! Я буду пробовать эту реализацию. Если возникнет вопрос по ней, думаю не откажете в возможности снова задать в этой теме вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 15:51 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36886960&tid=1542497]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 483ms |

| 0 / 0 |
