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

уровени город, магазин, точка обслуживания

у магазина может быть несколько свойств... - пусть, к примеру, цвет - белый или красный

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

сейчас я делаю так

в таблице магазинов завожу поле "ОБЪЕКТ"... и поля valid_from, valid_to (действительна с, по)
если цвет магазина меняется, то создаётся новая запись в таблице с новым цветом и тем же кодом "ОБЪЕКТ", в новой записи valid_from будет дата смены, а в старой valid_to - дата смены -1 день

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


есть идея привязывать как раз к полю "ОБЪЕКТ", тогда новые версии точек обслуживания не надо убдет создавать. Подскажите, как лучше делать?
Модератор: Перенесено из разработки ИС
...
Рейтинг: 0 / 0
иерархическая структура с историей
    #34458962
Для начала неплохо было бы описать, каким образом у вас осуществляется связка
Albatross уровени город, магазин, точка обслуживания
И имеются ли свойства у всех остальных объектов иерархии.
_____________________
С уважением , Андрей.
...
Рейтинг: 0 / 0
иерархическая структура с историей
    #34460630
Albatross
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень просто
магазин относится к конкретному городу
точка обслуживания относится к магазину

у всех объектов есть свойства и эти свойства меняются во времени, что нужно учитывать...
я делал так, как описал, но теперь понимаю, что это сложно получается - каждый раз создавать новые версии низших уровней...
потому думаю привязку сделать к объекту города (код, не зависящий от версии), так будет проще...
или я совсем не так делаю?
...
Рейтинг: 0 / 0
иерархическая структура с историей
    #34461333
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы! Самое интересное начинается когда эти узлы начинают переезжать по структуре. СКажем был магазин под одной скажем дирекцией, бац - переехал под другую. Как быть с суммами итого по дирекциям ? Или закрылся все нерспроданные товары передал другому. Или два соседних раз - о объединились в одно новое юрлицо. Или более крупный подмял более слабого.

Цвета - тьфу. Как быть с конкретными суммами и сделками, завязанными на узлы меняющейся иерерхии.

Я вот с банками чешу репу, но пока все четко и стройно не продумывается.
...
Рейтинг: 0 / 0
иерархическая структура с историей
    #34462225
Albatross очень просто
Хотелось бы, если Вы всё-таки рассчитываете на понимание вас друими людьми, посмотреть на существующую логическую структуру табличек:) Притом как иерархии, так привязки узлов к архивам.
_____________________
С уважением , Андрей.
...
Рейтинг: 0 / 0
иерархическая структура с историей
    #34462768
Albatross
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Васильев Андрей 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, тогда не надо будет лишний раз копировать все подчинённые элементы - новые версии их создавать.
...
Рейтинг: 0 / 0
иерархическая структура с историей
    #34463149
Если делать по-хорошему, то неплохо отделять информацию о структуре ("метаданные") от архивных данных. К примеру информацию о дереве (с его структурой) хранить в одном месте, о динамике изменения данных узлов - в другом.
Если-же это стуктура уже рабочей системы, то, возможно, Ваше предложение - единственный выход.
_____________________
С уважением , Андрей.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / иерархическая структура с историей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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