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

Посоветуйте, как подступиться к проблеме. Возможно есть что-то вроде паттерна для такой ситуации.

Есть древовидная структура организации.
У каждого подразделения есть свой ID, Название и ID ее родителя. Начал с этого способа организации деревьев, как с самого простого для начала.

В базе данных хранятся события, которые привязываются к подразделениям через ID подразделения.

Дальше, что может происходить с подразделениями:
1. Подразделение сменило название. Решается элементарно простым изменением названия.
2. Подразделение стало частью другого подразделения (поменяло родителя). Решается изменением ID родителя.
3. Подразделение расформировано.
4. На базе подразделения было сформировано 2 подразделения того же уровня. Например, "Управление анализа и отчетности" превратилось в 2 управления: "Управление Анализа" и "Управление Отчетности".

А задача стоит в следующем: видеть все события, которые были привязаны к подразделению, причем с учетом истории самого подразделения.
...
Рейтинг: 0 / 0
Структура компании
    #35764090
IT-Shaman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NektovКоллеги, приветствую.

Посоветуйте, как подступиться к проблеме. Возможно есть что-то вроде паттерна для такой ситуации.

Есть древовидная структура организации.
У каждого подразделения есть свой ID, Название и ID ее родителя. Начал с этого способа организации деревьев, как с самого простого для начала.

В базе данных хранятся события, которые привязываются к подразделениям через ID подразделения.

Дальше, что может происходить с подразделениями:
1. Подразделение сменило название. Решается элементарно простым изменением названия.
2. Подразделение стало частью другого подразделения (поменяло родителя). Решается изменением ID родителя.
3. Подразделение расформировано.
4. На базе подразделения было сформировано 2 подразделения того же уровня. Например, "Управление анализа и отчетности" превратилось в 2 управления: "Управление Анализа" и "Управление Отчетности".

А задача стоит в следующем: видеть все события, которые были привязаны к подразделению, причем с учетом истории самого подразделения.

очевидно, что нужно хранить историю изменений. продумать, какие могут быть действия (слияния, разделения, смена родителя, упразднение). и для подразделения хранить список ID, которые де-факто были этим подразделением. примерно так:
id подразделения, id старого подразделения. дата события, тип действия.
в вашем примере. было УАиО (пусть id=1) стало УА и УО (id 2 и 3 соответственно).
такое действие (разделение породит следующие записи:
1, 2, дата, разделение
1, 3, дата, разделение
2, 1, дата, образование
3, 1, дата, образование.
зная id подразделения, можно вытащить все другие id подразделения, которые были в истории
...
Рейтинг: 0 / 0
Структура компании
    #35764114
Nektov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IT-Shaman[quot Nektov]Коллеги, приветствую.
2, 1, дата, образование
3, 1, дата, образование.
зная id подразделения, можно вытащить все другие id подразделения, которые были в истории

За это спасибо, совсем из головы вылетело, что первое появление тоже нужно отмечать. И еще нужен флаг активности для подразделения, чтобы список для пользователя выглядел актуальным, и при этом значения не удалялись.
...
Рейтинг: 0 / 0
Структура компании
    #35764155
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NektovДальше, что может происходить с подразделениями:
1. Подразделение сменило название. Решается элементарно простым изменением названия.
2. Подразделение стало частью другого подразделения (поменяло родителя). Решается изменением ID родителя.
3. Подразделение расформировано.
4. На базе подразделения было сформировано 2 подразделения того же уровня. Например, "Управление анализа и отчетности" превратилось в 2 управления: "Управление Анализа" и "Управление Отчетности".

А задача стоит в следующем: видеть все события, которые были привязаны к подразделению, причем с учетом истории самого подразделения.
(1) Изменяем название. Пишем это в историю.
(2) Перелинковываем структуру - пишем это в историю.
(3) Заводим флаг для логического удаления (Активно = Да/Нет). Запись в БД никогда не удаляем, только помечаем как неактивную (расформированную).

(4) Ответте себе на следующие вопросы. Если подразделение было разделено на два, то к кому относится история по старому подразделению?
Варианты:
- Ни к кому (она относится к старому подразделению). Оба подразделения считаем новыми.
- К одному из двух подразделений, второе считаем полностью новым.
- к Обоим подразделениям. История должна быть видна и там и там одновременно. (самый замороченный вариант).
...
Рейтинг: 0 / 0
Структура компании
    #35764177
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если подразделение становится логически удаленным, то подчиненные подразделения становятся:
1. логически удаленными
2. переподчиняются родителю данного
С уважением, Naf
...
Рейтинг: 0 / 0
Структура компании
    #35764180
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafЕсли подразделение становится логически удаленным, то подчиненные подразделения становятся:
1. логически удаленными
2. переподчиняются родителю данного3. Запрещается логическое удаление такого подразделения.

Еще так можно.
...
Рейтинг: 0 / 0
Структура компании
    #35764208
Nektov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, спасибо большое, дальше буду думать...
...
Рейтинг: 0 / 0
Структура компании
    #35765002
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсюда и по ссылкам.
...
Рейтинг: 0 / 0
Структура компании
    #35768437
TsRV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nektov,

Во всех таблицах 2 поля формата Date: дата начала актуальности (образование) и дата окончания актуальности (разделение, расформирование).
Можно добавить поле с описанием или кодом причины.
Формат даты тоже можно уточнить на DateTime/TimeStamp.

Соответственно, в запросы добавится условие типа: where ((Date >= Date1) or IsNull(Date1)) and ((Date <= Date2) or IsNull(Date2))...
Все!

Любая операция с записью - закрываете Date2 (допустим, значением Date-1). Если запись не удаляется, то копируете с этим же ID и назначаете Date1 (соответственно первому "допустим" = Date). Нужны изменения - продолжайте их уже с новой записью...

ID можно генерить и новый, но тогда:
1. Не забывайте его менять у связанных объектов.
2. Нарушите историческую целостность связей, либо дОфИИИгааа придется копировать в историю (есть еще один вариант - держать двойной ID, но это уже избыточность)...
...
Рейтинг: 0 / 0
Структура компании
    #35768461
TsRV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ах да... в случае разделения отделов - один из них по-любому получается новый - по-крайней мере, если по начальству смотреть
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура компании
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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