Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Снова к вам за помощью, уважаемые гуру. Было бы неплохо получить замечания и советы относительно схемы одной базы, которую пытаюсь спроектировать наиболее удобным для последующего использования образом. В детали углубляться не буду, дабы не усложнять описание. Если возникнут уточняющие вопросы - постараюсь отвечать оперативно. Итак, основная цель - сбор и хранение табельной информации от подразделений организации (табели учета рабочего времени). Схема работы примерно такая: 1. Табельщики заполняют табели сотрудников (право заполнения дается на уровне подразделений). 2. После ввода данных для одного подразделения табельщик переводит подразделение в статус "ввод табелей завершен". 3. Специальные сотрудники проверяют табели подразделений и могут оставлять замечания, если что-то заполнено неверно, но не могут вносить изменения в данные табелей. Если ошибок нет, то спец. сотрудник переводит подразделение в статус "утверждено". Если есть ошибки, то он переводит подразделение в первичный статус "заполнение табелей" и табельщики снова работают с табелями, исправляя ошибки. 4. В конце концов, после нескольких циклов все подразделения получают статус "утверждено" и тогда можно считать сбор данных учета рабочего времени завершенным. Есть еще одна деталь: процесс привязан к отчетному месяцу. Массовое заполнение табелей за прошлый месяц обычно начинается в самых первых числах текущего месяца, но может проходить и равномерно в течение месяца. То есть привязка к отчетному месяцу есть всегда. Ну и еще раз замечу, что подтверждаются не табели отдельных сотрудников, а табели подразделений. Фактически, табель подразделения - это просто набор табелей сотрудников подразделения за отчетный месяц. Теперь, собственно, о схеме базы. Взгляните и начните критиковать, а я сразу добавлю пару-тройку комментариев. :) О табельщиках: у каждого подразделения два табельщика - основной и дополнительный. Ну вот просто такие требования в нашей организации. О трекинге: вынесен в отдельную таблицу, поскольку надо отслеживать статус подразделения не разово, а в отчетные месяцы. О статусах: два булевых поля "завершено" и "утверждено" обеспечивают необходимый набор. завершено=0 и утверждено=0 - заполнение табелей, завершено=1 и утвеждено=0 - ввод завершен, завершено=1 и утверждено=1 - табель утвержден, еще одно состояние недопустимо, что отслеживается соответствующим ограничением. О выборке сотрудников: сотрудники могут приниматься на работу, а также увольняться, поэтому список сотрудников подразделения всегда ограничивается выбранным отчетным месяцем (если у сотрудника есть табель за отчетный месяц - он появится в списке "доступных" сотрудников). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 13:43 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Может это годится для данной конкретной задачи, которая никогда в жизни не будет расширяться, но я всегда привык сущности типа "Подразделения" и "Сотрудники" оформлять в виде справочников и не завязывать через них основную бизнес-логику. Те я имею ввиду, что основной связкой, на мой взгляд, должна быть: "Табель подразделения" (с трекингом) - "Табель сотрудника". Кстати насчет самого трекинга - Вы уверены что у вас вскоре не появятся еще какие-нибудь статусы или этапы прохождения документов? Andrey ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 14:45 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Не гуру, но вот пара копеек: штатное расписание описал бы отдельно (возможно, так и есть?); процесс утверждения описал бы явно (для того, чтобы иметь возможность смотреть, сколько раз табель исправлялся); ввел бы блокировки для табеля (возможно, они уже есть?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 14:48 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Андрей, где-то мы с Вами одинаково мыслим. У меня такие же ощущения были насчет ключевых объектов бизнес-логики и второстепенных ролях для сущностей "подразделения" и "сотрудники". Не могли бы Вы поделиться своими наработками в этом направлении? Не схемы и код, конечно, а описание концепций для построения правильных, на Ваш взгляд, структур данных. Желательно привязавшись к текущей задаче, если не сложно. Заодно сравню свои предположения с Вашими. Что касается трекинга, то могу сказать, что в ближайшее время бизнес-процесс меняться не будет, так что появления дополнительных состояний опасаться не приходится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 16:26 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
штатное расписание описал бы отдельно (возможно, так и есть?); В каком смысле "отдельно"? процесс утверждения описал бы явно (для того, чтобы иметь возможность смотреть, сколько раз табель исправлялся); Снова не понял Вашу мысль. Можно чуть подробнее? Какие описания имеются ввиду? Каким образом изменится схема хранения данных? ввел бы блокировки для табеля (возможно, они уже есть?). Если я правильно понял, о каких блокировках идет речь, то они будут реализованы на уровне процедур доступа к данным. P.S. Какое тут странное форматирование для цитат... неудобно смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 16:37 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
> В каком смысле "отдельно"? На схеме Вы пишете: таблица Сотрудники, поле Должность. Я бы добавил таблицу штатного расписания. Вполне может быть, что один Сотрудник занимает не одну Должность. И вместо указания должности в таблице Сотрудники завел бы промежуточную таблицу для связи Сотрудников и единиц штатного расписания. > Можно чуть подробнее? Какие описания имеются ввиду? Каким образом > изменится схема хранения данных? Схема хранения данных никак не изменится. Просто вместо логических полей (или в дополнение к ним) появятся бизнес-процедуры. Таблица бизнес-процедур, таблица маршрутов (бизнес-процедура считается законченной, когда документ прошел весь маршрут), таблица движения документов (таблица состояний). > Если я правильно понял, о каких блокировках идет речь, то они будут > реализованы на уровне процедур доступа к данным. Да, наверное, правильно. Вроде того, что в документ после утверждения нельзя вносить изменения и подобные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 18:15 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
> На схеме Вы пишете: таблица Сотрудники, поле Должность. > Я бы добавил таблицу штатного расписания. Вполне может быть, > что один Сотрудник занимает не одну Должность. И вместо указания > должности в таблице Сотрудники завел бы промежуточную таблицу > для связи Сотрудников и единиц штатного расписания. О, нет. Об этом уже думали. Такая глубина детализации не требуется для этого проекта. Как выяснилось, приемлема некоторая избыточность хранимых данных о сотрудниках. > Схема хранения данных никак не изменится. Просто вместо логических > полей (или в дополнение к ним) появятся бизнес-процедуры. Таблица > бизнес-процедур, таблица маршрутов (бизнес-процедура считается > законченной, когда документ прошел весь маршрут), таблица движения > документов (таблица состояний). А вот про это можно подробнее? Раньше не приходилось создавать workflow с нуля. Есть опыт построения подобных систем на основе готовых "движков" вроде Microsoft Exchange Workflow Engine и Microsoft WSS Workflow, так что примерно понял, о чем Вы говорите, но хотелось бы услышать краткое описание, чтобы не перелопачивать массу документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 20:18 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Как будет выглядеть ситуация, когда работник в течении месяца сменит подразделение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 09:00 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
> Как будет выглядеть ситуация, когда работник в течении месяца > сменит подразделение? А вот тут и вступит в силу избыточность хранения. С позиции системы будет существовать два сотрудника, у одного из которых табель заполнен до смены подразделения, а у другого - после. Сама ситуация редкая, но мне уже не нравится. Может быть, склонюсь-таки к созданию дополнительных таблиц для отслеживания подобных ситуаций. Неохотно иду на подобные усложнения структуры хранения, поскольку они отдаляют от основной цели приложения. Спасибо за хороший повод для размышлений. Есть и другие вопросы, на которые текущая схема изящно ответить не сможет, но пока не знаю, как найти ту золотую середину, которая позволяет достичь главной цели, не превращая систему в способ отслеживания операций с сотрудниками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 09:54 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
А если человек работает по совместительству в двух подразделениях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 14:04 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
> А если человек работает по совместительству в двух подразделениях? См. последний абзац предыдущего сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 14:10 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Кстати, та форма модели что предложил я, подходит под об замечания от Серега и VadimS . 1. Если человек сменил подразделение, то это можно будет отследить по тому, что в данном месяце "табель сотрудника" будет учитываться уже в другом "табеле подразделения". Таким образом легко вычислить месяц, а при желании и точную дату перехода в другой отдел. 2. Если человек работает одновременно в двух отделах, то он просто напросто будет иметь два табеля одновременно. По одному в каждом своем подразделении. Это правда несколько усложняет вычисления по 1-му пункту, но не противоречит ему. По поводу своих наработок ... хм, честно говоря не совсем представляю в каком виде ими делиться. Вот разве что в качестве советов и обсуждений :)) Andrey ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 14:21 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Alisher H. Abdurahmanov А вот тут и вступит в силу избыточность хранения. Просто мысли вслух из собственного опыта. Если в начале проектирование допущено некоторое "допущение" (сори за тавтологию 8-), к концу проекта оно вырастает в такой геморой, что бывает проще переписать здоровую часть проекта, если не весь. Бывает не так обидно, если это по недосмотру, а вот "знал ведь да не сделал"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 15:32 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Alisher H. Abdurahmanov Итак, основная цель - сбор и хранение табельной информации от подразделений организации (табели учета рабочего времени). А если углубиться в детали? Данные по табелям не будут же просто хранится для того чтобы хранились...:)) Их скорее всего нужно будет передовать дальше ( в отдел заработной платы, например). В каком виде: на бумаге или электронно. Если на бумаге - хорошо. Но в отделе зароботной платы скорее всего стоит программа по расчету. И рано или поздно захотят принимать данные в электронном виде. Как стыковать? Об этом лучше подумать сейчас, на этапе проектирования. Обычно такие задачи: табельный учет-заработная плата- отдел кадров смотрят в комплексе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 15:58 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Андрей, Сергей, Вадим, давайте тогда вот как поступим: я попытаюсь изобразить другую схему базы, а вы будете вносить свои поправки. Ну, или совсем поставите крест и подскажете, на что на самом деле она должна быть похожа. Я понимаю, что у вас мало времени на то, чтобы детально описывать, какие сущности должны быть в схеме, как они связаны и т.д. Кроме того, согласен потратить больше времени на проектирование под вашим руководством, хоть и поджимают сроки. Все-таки не каждый день удается получать хорошие советы от знающих людей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 20:38 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Вот здесь на эту тему было.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2004, 09:15 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Dik76, благодарю за хорошую ссылку - она точно понадобится. Уже записал в рекомендации для следующей версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2004, 09:30 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Что ж, новая схема, в которой попытался (не судите строго) учесть советы Андрея, Сергея и Вадима. На всякий случай, поясню некоторые обозначения и моменты. 1. Таблицы: TimeKeepers - табельщики; DeptTabs - табели подразделений; Tabs - табели сотрудников. 2. Поля: RptMonth - отчетный месяц; Company - код организации, решил не выносить организации в отдельный словарь, поскольку их у нас всего 5 и подразделений - около 80. 3. Табельщики закрепляются не за подразделениями, а за табелями конкретных отчетных месяцев. Пока не определил, даст ли эта дополнительная гибкость какие-то преимущества. 4. В таблицах табелей первичные ключи - искусственные. Так, в DeptTabs можно выделить составной ключ DeptID + RptMonth, а в Tabs - составной ключ DTID + EmpID. Тоже пока окончательно не решил, как поступить лучше. Сейчас кажется, что так будет проще построить уровень доступа к данным на стороне сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2004, 09:47 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Кстати насчет самого трекинга - Вы уверены что у вас вскоре не появятся еще какие-нибудь статусы или этапы прохождения документов? Мне что-то тоже не нравится эти два флага в таблице заголовков табелей. Некрасиво. Даже если новые статусы и не планируется вводить, я б сделал лучше справочник статусов и таблицу смен статусов (первичный ключ, ссылка на присвоенный статус, ссылка на заголовок табеля, дата). Потом название компании в таблице подразделений глаз режет. А если название компании поменяется, по всем подразделениям лазить и исправлять? По мне так лучше внешним ключом туда ее определить - ссылка на справочник компаний. А вообще, мне больше интересно, какая будет структура для самого табеля, а не эта возня с документами и подразделениями. То есть как будут организованны данные по конкретной строчке табеля? Сдается мне, что просто полями Данные1, данные2 ... тут не обойдешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2004, 19:15 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
> Мне что-то тоже не нравится эти два флага в таблице заголовков табелей. > Некрасиво. Даже если новые статусы и не планируется вводить, я б сделал > лучше справочник статусов и таблицу смен статусов (первичный ключ, > ссылка на присвоенный статус, ссылка на заголовок табеля, дата). Предпочитаю создавать решения adhoc на первом витке реализации. Тем более, что бизнес-процесс еще долго меняться не будет. Писать свой движок workflow, пусть даже и упрощенный, в этой ситуации не вижу необходимости именно из-за дополнительной сложности выборки и обработки. "Не усложняйте без надобности". (с) Гради Буч > Потом название компании в таблице подразделений глаз режет. А если > название компании поменяется, по всем подразделениям лазить > и исправлять? По мне так лучше внешним ключом туда ее определить - > ссылка на справочник компаний. 1. Организаций всего 5, и это еще очень долго не изменится. Справочник не нужен, как мне кажется. 2. Хранится не название, а некоторый код компании. Скажем, в char(6). 3. Ваш довод не выглядит убедитиельно даже в том случае, если хранятся полные названия организаций. Смена названия организации - ровно один запрос UPDATE, а не "лазить и исправлять". > А вообще, мне больше интересно, какая будет структура для самого > табеля, а не эта возня с документами и подразделениями. То есть как > будут организованны данные по конкретной строчке табеля? > Сдается мне, что просто полями Данные1, данные2 ... тут не обойдешься. Те первичные табельные данные, которые собираются в наших организациях, не представляют собой сложные структуры, так что обходимся набором полей. P.S. Нерюх, прошу извинить меня за то, что ответ получился таким... резким и каким-то... в поучительном тоне, что ли. Лишь пытался отвечать кратко и строго по темам, ничего личного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2004, 21:36 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Alisher H. Abdurahmanov> Мне что-то тоже не нравится эти два флага в таблице заголовков табелей. > Некрасиво. Даже если новые статусы и не планируется вводить, я б сделал > лучше справочник статусов и таблицу смен статусов (первичный ключ, > ссылка на присвоенный статус, ссылка на заголовок табеля, дата). Предпочитаю создавать решения adhoc на первом витке реализации. Тем более, что бизнес-процесс еще долго меняться не будет. Писать свой движок workflow, пусть даже и упрощенный, в этой ситуации не вижу необходимости именно из-за дополнительной сложности выборки и обработки. "Не усложняйте без надобности". (с) Гради Буч Структура то не нормализованная получается. Не понимаю этого "не усложняйте" , в чем здесь усложнение? То же самое и к компаниям относится. Alisher H. Abdurahmanov 3. Ваш довод не выглядит убедитиельно даже в том случае, если хранятся полные названия организаций. Смена названия организации - ровно один запрос UPDATE, а не "лазить и исправлять". В это ж ни кто не поверит Все мы на этом подскальзываемся. Во-первых, написать название по разному элементарно, так что одним апдейтом не обойдешься, а будешь искать и исправлять в рукопашную. Во-вторых, потребуется хранить ИНН и что дальше? ИМХО справочник организаций необходим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 08:44 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Alisher H. AbdurahmanovТабельщики закрепляются не за подразделениями, а за табелями конкретных отчетных месяцев. Пока не определил, даст ли эта дополнительная гибкость какие-то преимущества. Это не дополнительная гибкость, а дополнительный геморойчик, ИМХО. При вводе нового табеля за период надо рыскать по старым табелям. А смысл? Насчет компаний согласен с несогласными 8-). Или в отдельную таблицу, или одна "деревянная". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 09:08 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Alisher H. Abdurahmanov> P.S. Нерюх, прошу извинить меня за то, что ответ получился таким... резким и каким-то... в поучительном тоне, что ли. Лишь пытался отвечать кратко и строго по темам, ничего личного. Не парься, я для того и пытаюсь решать такие задачки, чтобы повышать квалификацию. Так что если человек высказывет здравые мысли, то тон тут особой роли не играет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2004, 12:21 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Ну вот я примерно так себе и представлял решение. Так что за исключением мелких замечаний товарищей, с которыми я абсолютно согласен, можно на этом и остановиться... если конечно ты уверен на все 199%, что задача не будет меняться, подстраиваться или совмещаться с какой-то другой. Правда практика показывается, что обычно 1 оставшийся процент перевешивает первые 199 :) Такова жизнь... Andrey ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2004, 14:06 |
|
||
|
Нужны дельные советы по проектированию базы
|
|||
|---|---|---|---|
|
#18+
Андрей, Вадим, Сергей, Дик76, Нерюх, большое спасибо за поддержку в разработке даже такой простой схемы базы. Ваши последние замечания также учел, убедили вы меня. :) Да, Андрей, задачу обещали не менять, но как-то слабо я им верю. Благо, что заказчики внутренние, а потому поле для компромиссов чуть шире. Это придает некоторую дополнительную уверенность (мнимую, наверное). ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2004, 16:26 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32697691&tid=1546278]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 562ms |

| 0 / 0 |
