|
|
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
Коллеги, приветствую. Посоветуйте, как подступиться к проблеме. Возможно есть что-то вроде паттерна для такой ситуации. Есть древовидная структура организации. У каждого подразделения есть свой ID, Название и ID ее родителя. Начал с этого способа организации деревьев, как с самого простого для начала. В базе данных хранятся события, которые привязываются к подразделениям через ID подразделения. Дальше, что может происходить с подразделениями: 1. Подразделение сменило название. Решается элементарно простым изменением названия. 2. Подразделение стало частью другого подразделения (поменяло родителя). Решается изменением ID родителя. 3. Подразделение расформировано. 4. На базе подразделения было сформировано 2 подразделения того же уровня. Например, "Управление анализа и отчетности" превратилось в 2 управления: "Управление Анализа" и "Управление Отчетности". А задача стоит в следующем: видеть все события, которые были привязаны к подразделению, причем с учетом истории самого подразделения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 10:34 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
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 подразделения, которые были в истории ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 10:49 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
IT-Shaman[quot Nektov]Коллеги, приветствую. 2, 1, дата, образование 3, 1, дата, образование. зная id подразделения, можно вытащить все другие id подразделения, которые были в истории За это спасибо, совсем из головы вылетело, что первое появление тоже нужно отмечать. И еще нужен флаг активности для подразделения, чтобы список для пользователя выглядел актуальным, и при этом значения не удалялись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 11:00 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
NektovДальше, что может происходить с подразделениями: 1. Подразделение сменило название. Решается элементарно простым изменением названия. 2. Подразделение стало частью другого подразделения (поменяло родителя). Решается изменением ID родителя. 3. Подразделение расформировано. 4. На базе подразделения было сформировано 2 подразделения того же уровня. Например, "Управление анализа и отчетности" превратилось в 2 управления: "Управление Анализа" и "Управление Отчетности". А задача стоит в следующем: видеть все события, которые были привязаны к подразделению, причем с учетом истории самого подразделения. (1) Изменяем название. Пишем это в историю. (2) Перелинковываем структуру - пишем это в историю. (3) Заводим флаг для логического удаления (Активно = Да/Нет). Запись в БД никогда не удаляем, только помечаем как неактивную (расформированную). (4) Ответте себе на следующие вопросы. Если подразделение было разделено на два, то к кому относится история по старому подразделению? Варианты: - Ни к кому (она относится к старому подразделению). Оба подразделения считаем новыми. - К одному из двух подразделений, второе считаем полностью новым. - к Обоим подразделениям. История должна быть видна и там и там одновременно. (самый замороченный вариант). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 11:21 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
Если подразделение становится логически удаленным, то подчиненные подразделения становятся: 1. логически удаленными 2. переподчиняются родителю данного С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 11:27 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
NafЕсли подразделение становится логически удаленным, то подчиненные подразделения становятся: 1. логически удаленными 2. переподчиняются родителю данного3. Запрещается логическое удаление такого подразделения. Еще так можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 11:29 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
Коллеги, спасибо большое, дальше буду думать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 11:37 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
Отсюда и по ссылкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 15:31 |
|
||
|
Структура компании
|
|||
|---|---|---|---|
|
#18+
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, но это уже избыточность)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2009, 07:40 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35768461&tid=1543481]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
191ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 521ms |

| 0 / 0 |
