|
|
|
иерархическая структура с историей
|
|||
|---|---|---|---|
|
#18+
нужно сделать иерархическую структуру, которая поддерживает историю изменений например уровени город, магазин, точка обслуживания у магазина может быть несколько свойств... - пусть, к примеру, цвет - белый или красный допустим, я хочу посчитать, сколько за 2006 год у меня точки обслуживания обслужили клиентов в красных и в белых магазинах.... поэтому нужно хранить, что такая-то точка обслуживания сначала бала в белом магазине, а потом он сменил цвет на красный, то есть дату смены сейчас я делаю так в таблице магазинов завожу поле "ОБЪЕКТ"... и поля valid_from, valid_to (действительна с, по) если цвет магазина меняется, то создаётся новая запись в таблице с новым цветом и тем же кодом "ОБЪЕКТ", в новой записи valid_from будет дата смены, а в старой valid_to - дата смены -1 день Сейчас, если меняю свойство магазина, то я аналогично создаю новые версии для точек обслуживания, чтобы их привязать к магазину нового цвета, то есть версия точки обслуживания у меня привязана к версии магазина есть идея привязывать как раз к полю "ОБЪЕКТ", тогда новые версии точек обслуживания не надо убдет создавать. Подскажите, как лучше делать? Модератор: Перенесено из разработки ИС ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 10:38 |
|
||
|
иерархическая структура с историей
|
|||
|---|---|---|---|
|
#18+
Для начала неплохо было бы описать, каким образом у вас осуществляется связка Albatross уровени город, магазин, точка обслуживания И имеются ли свойства у всех остальных объектов иерархии. _____________________ С уважением , Андрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 12:54 |
|
||
|
иерархическая структура с историей
|
|||
|---|---|---|---|
|
#18+
очень просто магазин относится к конкретному городу точка обслуживания относится к магазину у всех объектов есть свойства и эти свойства меняются во времени, что нужно учитывать... я делал так, как описал, но теперь понимаю, что это сложно получается - каждый раз создавать новые версии низших уровней... потому думаю привязку сделать к объекту города (код, не зависящий от версии), так будет проще... или я совсем не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 22:22 |
|
||
|
иерархическая структура с историей
|
|||
|---|---|---|---|
|
#18+
Гы! Самое интересное начинается когда эти узлы начинают переезжать по структуре. СКажем был магазин под одной скажем дирекцией, бац - переехал под другую. Как быть с суммами итого по дирекциям ? Или закрылся все нерспроданные товары передал другому. Или два соседних раз - о объединились в одно новое юрлицо. Или более крупный подмял более слабого. Цвета - тьфу. Как быть с конкретными суммами и сделками, завязанными на узлы меняющейся иерерхии. Я вот с банками чешу репу, но пока все четко и стройно не продумывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2007, 19:23 |
|
||
|
иерархическая структура с историей
|
|||
|---|---|---|---|
|
#18+
Albatross очень просто Хотелось бы, если Вы всё-таки рассчитываете на понимание вас друими людьми, посмотреть на существующую логическую структуру табличек:) Притом как иерархии, так привязки узлов к архивам. _____________________ С уважением , Андрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2007, 06:20 |
|
||
|
иерархическая структура с историей
|
|||
|---|---|---|---|
|
#18+
Васильев Андрей Albatross очень просто Хотелось бы, если Вы всё-таки рассчитываете на понимание вас друими людьми, посмотреть на существующую логическую структуру табличек:) Притом как иерархии, так привязки узлов к архивам. _____________________ С уважением , Андрей. ну ок сейчас это примерно так выглядит таблица магазинов HRTBdev_hier_location dev_hier_location_id PK int (not null) 4 Суррогатный ключ dev_hier_location_desc varchar (not null) 244 Описание gni_code FK char (not null) 11 Код ГНИ dev_hier_org_id FK int (not null) 4 Код организации dev_hier_addr_id FK int (not null) 4 Код адреса inserted_date datetime (not null) 8 Дата вставки modified_date datetime (not null) 8 Дата редактирования inserted_by varbinary (not null) 85 Кто вставил modified_by varbinary (not null) 85 Кто редактировал valid_from datetime (not null) 8 Начало периода действия объекта valid_to datetime 8 Конец периода дейтвия объекта object int (not null) 4 Код объекта когда мы заводим новую версию, то добавляем новую запись, вводим в старую версию valid_to, в новой valid_from = старая valid_to + 1 день, а код объекта оставляем тем же. Для всех подчинённых элементов (мест расположения) создаём новые версии таким же образом и вносим их в новую версию магазина HRTBdev_hier_place Места расположений dev_hier_place_id int (not null) 4 Суррогатный ключ dev_hier_place_desc varchar (not null) 244 Описание dev_hier_location_id int (not null) 4 Код территории размещения dev_hier_placement_type_id int (not null) 4 Код типа места расположения dev_hier_worktime_type_id int (not null) 4 Режим работы inserted_date datetime (not null) 8 Дата вставки modified_date datetime (not null) 8 Дата редактирования inserted_by varbinary (not null) 85 Кто вставил modified_by varbinary (not null) 85 Кто редактировал valid_from datetime (not null) 8 Начало периода действия объекта valid_to datetime 8 Конец периода действия объекта object int (not null) 4 Код объекта HRTBdev_hier_payment_place Точки обслуживания dev_hier_payment_place_id PK int (not null) 4 Суррогатный ключ dev_hier_payment_place_code int (not null) 4 Код точки обслуживания dev_hier_payment_place_desc varchar (not null) 232 Название dev_hier_place_id FK int (not null) 4 Код места расположения inserted_date datetime (not null) 8 Дата вставки modified_date datetime (not null) 8 Дата редактирования inserted_by varbinary (not null) 85 Кто вставил modified_by varbinary (not null) 85 Кто редактировал valid_from datetime (not null) 8 Начало периода действия объекта valid_to datetime 8 Конец периода действия объекта object int (not null) 4 Код объекта то есть получается - магазин - место расположения - точка обслуживания если меняем какой-нить атрибут места магазина в рамках истории, то как описано выше, создаём новую версию с тем же кодом объекта, проставляем соответсвенно valid_from и valid_to, чтобы версии не пересекались, для всех подчинённых мест расположения и соответственно, точек обслужвания создаём новые версии... для места расположения - так же, только проще, потому что вниз надо будет спуститься только на один уровень для точек обслужвания - самое простое, то есть если dev_hier_payment_place_code меняется в какой-то день, то старую версию закрываем предыдущим днём (valid_to), а новую открываем текущим, код объекта (object) оставляем тем же. теперь хочу сделать по-другому, а именно, чтобы, к примеру, точка обслуживания привязывалась не к коду версии места расположения, а к полю object, тогда не надо будет лишний раз копировать все подчинённые элементы - новые версии их создавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2007, 11:10 |
|
||
|
иерархическая структура с историей
|
|||
|---|---|---|---|
|
#18+
Если делать по-хорошему, то неплохо отделять информацию о структуре ("метаданные") от архивных данных. К примеру информацию о дереве (с его структурой) хранить в одном месте, о динамике изменения данных узлов - в другом. Если-же это стуктура уже рабочей системы, то, возможно, Ваше предложение - единственный выход. _____________________ С уважением , Андрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2007, 12:33 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34462225&tid=1544606]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
202ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 550ms |

| 0 / 0 |
