powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура БД для нормирования труда
23 сообщений из 23, страница 1 из 1
Структура БД для нормирования труда
    #37776897
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Нахожусь в процессе проектирования структуры БД, одной из функций которой будет нормирование труда. Есть таблица USERS (Сотрудники), связанная внешним ключом с таблицей DEPARTMENT (Отделы). Есть таблица WORK_QUOTA, которая будет определять норматив чего-либо в штуках (поле WQ_COUNT) и "стоимость выполнения норматива". Нормативы (в порядке приоритета) могут назначаться Отделам и/или персонально Сотрудникам (направление связи пока не придумано). Еще у норматива должен быть период действия. Например, норматив на сборку товара 100 штук в смену, действующий с 01.01.2012 г без указания даты окончания, т.е. своего рода норматив "по умолчанию". Затем вводится срочный норматив на 200 штук в смену со специальной "стоимостью выполнения норматива", который действует в течение недели. После окончания действия срочного норматива снова вступает в силу норматив "по умолчанию". По каждому сотруднику ведется ежедневный учет сборки товара. Структура БД должна позволять получить данные по выполнению нормативов в любой день. Подскажите, в какую сторону двигаться для реализации задуманного? Спасибо.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777037
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello Подскажите, в какую сторону двигаться для реализации задуманного? Отсюда и до обеда
http://segfault.kiev.ua/smart-questions-ru.html
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777047
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257Отсюда и до обеда
http://segfault.kiev.ua/smart-questions-ru.html И к чему эта ссылка?
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777058
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777079
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257А чего бы просто мимо не пройти "отсюда и до обеда", а? Или троллим потихоньку? Если вопрос в первом посте в чем-то непонятен, то могу уточнить.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777104
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloПодскажите, в какую сторону двигаться для реализации задуманного?

Таблица рабочих дней, содержащая два поля: "норма выработки", "сделано фактически".
Заполняется на год вперёд при получении ОК рабочего календаря.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777149
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТаблица рабочих дней, содержащая два поля: "норма выработки", "сделано фактически".
Заполняется на год вперёд при получении ОК рабочего календаря.
Т.е. при изменении периода действия норматива делать пересчет "норм выработки" в таблице рабочих дней? Вообще такая таблица изначально не рассматривалась, т.к. ежедневный учет сборки товара задуман как вычисляемый на основе накладных, собранных каждым Сотрудником. Т.е. чтобы определить выполнение норматива, выбираем накладные, собранные конкретным Сотрудником в определенный день, затем определяем, какой норматив действовал в этот день. Все это хотелось бы делать одним запросом. Мне кажется, создание дополнительной таблицы приведет к некоей избыточности информации, хотя выборки из такой таблицы будут идти очень быстро.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777171
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello Или троллим потихоньку? Ваша задача очень напоминает тестовое задание для студентов.
Marcello Если вопрос в первом посте в чем-то непонятен, то могу уточнитьУточните почему вы не хотите пользоваться стандартным классическим методом сущность связь?
Перечислите сущности, обозначьте связи (частично вы это сделали), уткнитесь в проблему: можно сделать так или так, какой из способов лучше и почему?
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777204
Александр Пузаков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

На вскидку.

Хранение нормативов:
Поле ОписаниеВидНорматива Храни ссылку на нормативПодразделение Хранит ссылку на подразделениеНачалоДействия дата начала действия нормативаОкончаниеДействия дата окончания действия нормативовПриоритет Числовое поле. Принимает только положительные целочисленные значения. Необходимо для разрешения конфликтов в случае действия нескольких нормативов в один период.ВидОперации Хранит ссылку на определенную работу/операциюКоличество Нормативное количество


История выполнения нормативов:
Поле ОписаниеПериод дата выполнения работПодразделение Хранит ссылку на подразделениеСотрудник Хранит ссылку на конкретного сотрудникаВидНорматива Храни ссылку на нормативВидОперации Хранит ссылку на определенную работу/операциюНорма Нормативное количествоФактически Фактическое количество

Пояснения:
Для получения нужных нормативов делаем запрос по первой таблице с отбором по конкретному подразделению, указав ограничение на окончание действия (чтобы дата окончания была не меньше текущей даты), и получая запись с самым высоким приоритетом. Во вторую таблицу записываем выработку конкретного сотрудника, при этом указываем норматив который он должен был выполнить, нормативную выработку и фактическую выработку.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777383
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во главе всего стоит объект.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE OBJECTS (
    OBJ_ID             BIGINT NOT NULL, /*первичный ключ*/
    OBJ_AUTHOR         BIGINT, /*автор объекта - FK @ USERS*/
    OBJ_OWNER          BIGINT, /*текущий владелец объекта - FK @ USERS*/
    OBJ_MODIFIER       BIGINT, /*последний "редактор" объекта - FK @ USERS*/
    OBJ_TYPE           BIGINT, /*тип объекта - FK @ OBJTYPES*/
    OBJ_TIME_CREATED   TIMESTAMP NOT NULL, /*время создания*/
    OBJ_TIME_MODIFIED  TIMESTAMP NOT NULL, /*время редактирования*/
    OBJ_STATUS         BIGINT, /*текущее состояние - FK @ WORKFLOW*/
    OBJ_ACTIVE         SMALLINT NOT NULL,
    OBJ_BLOCKED        SMALLINT NOT NULL,
    OBJ_HIDDEN         SMALLINT NOT NULL,
    OBJ_DATE_FROM      DATE, /*"начало действия"*/
    OBJ_DATE_TO        DATE, /*"окончание действия"*/
    OBJ_BARCODE        VARCHAR(20),
    OBJ_TEXT           VARCHAR(2048), /*комментарий по объекту*/
    OBJ_URL            VARCHAR(2048) /*ссылка на файл*/
);

Все остальные таблицы внешним ключом связаны с OBJ_ID. Это же поле является первичным ключом связываемой таблицы. Накладная (DOCUMENT) своим первичным ключом DC_ID "растет" от OBJ_ID. Авторство накладной будет браться из поля OBJ_AUTHOR. Каждый Сотрудник (USERS) также "растет" от объекта (US_ID -> OBJ_ID) и имеет привязку к Отделу (DEPARTMENT) по внешнему ключу US_ID_DPT. Нормативы WORK_QUOTA (тоже растущие от OBJECTS) могут быть связаны с Сотрудниками (WQ_ID_US) для персонального нормирования и/или с Отделами (WQ_ID_DPT) для нормирования по Отделу. Время действия норматива будет браться из полей OBJ_DATE_FROM и OBJ_DATE_TO.

Идея с приоритетом норматива хорошая, поскольку начало и окончание действия норматива "живут" в OBJECTS. Иначе можно было назначить уникальность по полям WQ_ID_US + WQ_ID_DPT + период действия, чтоб избежать конфликтов без использования приоритета.

Повторюсь, заводить отдельную таблицу для выполнения нормативов не хочется, т.к. всю необходимую информацию планируется брать одним запросом. По дате и Сотруднику можно получить собранным им накладные. Но пока непонятно, как в этом же запросе получить норматив, действующий в эту дату, потому что нормативы могут оказаться "вложенными"? Есть ли какие-нибудь идеи по такому запросу? Или это уже выходит за рамки темы "Проектирование БД" ?
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777610
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello Во главе всего стоит объект.Это ваши и только ваши тараканы в голове. Впрочем вреда от этого "общего предка всего сущего" немного (нельзя наложить ограничения внешнего ключа), как впрочем и пользы.
Marcello Иначе можно было назначить уникальность по полям WQ_ID_US + WQ_ID_DPT + период действия, чтоб избежать конфликтов без использования приоритета.Нельзя избежать конфликтов, sql не поддерживает ограничения непересекаемости интервалов. Плюс конфликты заложены в условиях задачи.
Marcello Повторюсь, заводить отдельную таблицу для выполнения нормативов не хочется, т.к. всю необходимую информацию планируется брать одним запросом.Одним запросом это верно, а вот отдельную таблицу завести придется (на мой взгляд лучше две таблицы нормативы на отдел и нормативы на человека).
Marcello действующий с 01.01.2012 г без указания даты окончаниябез указания даты окончания лучше реализовать через дату в будущем типа 01.01.2099 или 01.01.9999, запросы будет писать легче, причем пользователю это можно не показывать.
Код: sql
1.
select nullif(d_end,'01.01.2099') from mytable ...


Marcello Но пока непонятно, как в этом же запросе получить норматив, действующий в эту дату, потому что нормативы могут оказаться "вложенными"?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
create table dept
(
dept_id int primary key,
dept_name varchar(100)
)

create table users
(
user_id int primary key,
dept_id int references dept,
user_name varchar(100)
)

create table WORK_QUOTA_user
(
WORK_QUOTA_user_id int primary key
user_id int references users,
d_from date,
d_to date,
WORK_QUOTA_value int,
priority int
)

create table WORK_QUOTA_dept
(
WORK_QUOTA_user_id int primary key
dept_id int references dept,
d_from date,
d_to date,
WORK_QUOTA_value int,
priority int
)

Норматив для человека :user_id на дату :date

select top 1 priority, WORK_QUOTA_value
from
(
select priority, WORK_QUOTA_value from WORK_QUOTA_user wu
join users u on wu.user_id=u.user_id
where u.user_id=:user_id and :date between wu.d_from and wu.d_to
union all
select priority, WORK_QUOTA_value from WORK_QUOTA_dept wd
join dept d on d.dept_id=wd.dept_id
join users u on u.detp_id=d.dept_id
where u.user_id=:user_id and :date between wd.d_from and wd.d_to
) a
order by -- а вот тут включите вашу фантазию как отсортировать нормативы


Реализация top 1 зависит от вашей субд (limit или rowcount или что там еще)
Решение выше это решение задачи "в лоб" - базовое, от которого как от печки надо затем плясать.

фактическое выполнение - это совершенно отдельный разговор
Marcello По дате и Сотруднику можно получить собранным им накладные.про накладные разговора вообще не было.

Александр Пузаков указав ограничение на окончание действия (чтобы дата окончания была не меньше текущей даты)Вы не учитываете изменения в будущем.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777632
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257Впрочем вреда от этого "общего предка всего сущего" немного (нельзя наложить ограничения внешнего ключа), как впрочем и пользы.Внешние ключи в таблицах ссылаются на другие таблицы. Через OBJECTS никаких ссылок нет. У всех типов объектов - накладные, сотрудники, отделы и т.д. и т.п. - есть одинаковые свойства и признаки видимости, активности, блокированности и др., что следует из спойлера 12490269 . Не вижу смысла дублировать эти свойства в каждую таблицу, если все они имеют одинаковое назначение. Кроме того, изменения во всех таблицах будут инициировать изменения в объектах, что будет использоваться для сбора имененной и удаленной информации для последующей передачи между серверами. Про это я не писал в первом посте, потому что к вопросу нормирования труда это не имеет никакого отношения.

SERG1257Реализация top 1 зависит от вашей субд (limit или rowcount или что там еще)СУБД FireBird 2.5 или Oracle. Еще нет окончательного решения.

Далее вопрос по запросу:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select top 1 priority, WORK_QUOTA_value
from
(
select priority, WORK_QUOTA_value from WORK_QUOTA_user wu
join users u on wu.user_id=u.user_id
where u.user_id=:user_id and :date between wu.d_from and wu.d_to
union all
select priority, WORK_QUOTA_value from WORK_QUOTA_dept wd
join dept d on d.dept_id=wd.dept_id
join users u on u.detp_id=d.dept_id
where u.user_id=:user_id and :date between wd.d_from and wd.d_to
) a
order by ...

Допустим, есть норматив "по умолчанию" (1) с 01.01.2012 до 01.01.9999. Есть "квартальный" норматив (2) с 01.04.2012 по 30.06.2012. И есть какой-то особый норматив (3) с 25.04.2012 по 30.04.2012. Чтобы запрос вернул правильный норматив (3) без учета приоритета, нужно написать вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select first 1 WORK_QUOTA_value
from
(
select wu.d_from, wu.d_to, wu.WORK_QUOTA_value from WORK_QUOTA_user wu
join users u on wu.user_id=u.user_id
where u.user_id=:user_id and :date between wu.d_from and wu.d_to
union all
select wd.d_from, wd.d_to, wd.WORK_QUOTA_value from WORK_QUOTA_dept wd
join dept d on d.dept_id=wd.dept_id
join users u on u.detp_id=d.dept_id
where u.user_id=:user_id and :date between wd.d_from and wd.d_to
) a
order by a.d_from asc, a.d_to desc

Верно?
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777669
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello Верно? Нет. Ваш запрос вернет самую раннюю запись (которой скорее всего будет норматив по умолчанию)
плюс у вас в датасете будут записи нормативов на отдел и нормативов на человека. Их тоже надо сортировать.
В любом случае это вопрос к вашим постановщикам/аналитикам/специалисту_от_бизнеса - описать внятный алгоритм приоритетов.
Например: нормативы на человека (если они есть) всегда выше чем нормативы на отдел, из всех вложенных нормативов приоритетным считается самый последний принятый, в случае нескольких принятых одновременно, приоритет у того, который заканчивается раньше.
тогда ваш запрос будет
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select first 1 WORK_QUOTA_value
from
(
select 0 as isDept, wu.d_from, wu.d_to, wu.WORK_QUOTA_value from WORK_QUOTA_user wu
join users u on wu.user_id=u.user_id
where u.user_id=:user_id and :date between wu.d_from and wu.d_to
union all
select 1 as isDept, wd.d_from, wd.d_to, wd.WORK_QUOTA_value from WORK_QUOTA_dept wd
join dept d on d.dept_id=wd.dept_id
join users u on u.detp_id=d.dept_id
where u.user_id=:user_id and :date between wd.d_from and wd.d_to
) a
order by isDept asc, a.d_from desc, a.dto asc
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777672
Александр Пузаков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Александр Пузаков указав ограничение на окончание действия (чтобы дата окончания была не меньше текущей даты)Вы не учитываете изменения в будущем.

Т.е. при изменении "старого" норматива в будущем все отработанное ранее должно пересчитаться? Это вообще как-то не спортивно получается...
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777693
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду
Александр Пузаков указав ограничение на окончание действия (чтобы дата окончания была не меньше текущей даты)плюс ограничение на начало действия чтобы дата начала была не позднее текущей даты.
Тогда можно добавить норматив сейчас чтобы он действовал в будущем, например на следующий месяц и не попадался в выборки в этом месяце.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777699
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257запрос вернет самую раннюю запись (которой скорее всего будет норматив по умолчанию)Действительно. Перепутал сортировки. Потом сюда добавлю фактическое выполнение норматива по накладным, собранным Сотрудником в определенную дату, и получается, что можно обойтись без дополнительных таблиц план-факт.

Александр ПузаковТ.е. при изменении "старого" норматива в будущем все отработанное ранее должно пересчитаться?Да, так и есть. Но пересчитается не все, а только то, что попадает в период измененного норматива.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777709
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcelloпересчитается не все, а только то, что попадает в период измененного норматива.

Т.е. человек старается, вкалывает, а потом приходит за зарплатой, а ему - хрен с маслом.
Мы, видите ли, нормативы задним числом пересчитали чтобы ФЗП сэкономить...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777726
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТ.е. человек старается, вкалывает, а потом приходит за зарплатой, а ему - хрен с маслом.
Мы, видите ли, нормативы задним числом пересчитали чтобы ФЗП сэкономить...Давайте не будем отвлекаться от темы. Норматив вполне мог быть выставлен с ошибкой. Такое же возможно?
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777731
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloТакое же возможно?
Нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777787
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovMarcelloТакое же возможно?
Нет.
Назначили новый норматив с 1 числа следующего месяца. А 2 числа увидели заметное снижение выполнения плана от среднего значения. Выяснилось, что норму выставили больше нужного на 25%. При среднем выполнении плана 90% вряд ли кто-то сможет выполнить ошибочно выставленный норматив даже на 75%. Предлагаете оставить норматив как есть и не менять до следующего месяца?
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777797
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloПредлагаете оставить норматив как есть и не менять до следующего месяца?

Почему "до следующего месяца"? Уже третьего числа новый тариф можно ввести в силу.
А если "заметили" только через полгода, то Вы предлагаете пересчитать всё на полгода назад?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777894
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovУже третьего числа новый тариф можно ввести в силу.А первое и второе число по Вашей логике оставляем с ошибочным нормативом? Дмитрий, давайте не будем уходить от темы. Вопрос был не по нормированию труда, а по реализации структуры БД. Ответы на этот вопрос в теме даны. Спасибо всем за участие.
...
Рейтинг: 0 / 0
Структура БД для нормирования труда
    #37777944
Александр Пузаков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Я имел ввиду
Александр Пузаков указав ограничение на окончание действия (чтобы дата окончания была не меньше текущей даты)плюс ограничение на начало действия чтобы дата начала была не позднее текущей даты.
Тогда можно добавить норматив сейчас чтобы он действовал в будущем, например на следующий месяц и не попадался в выборки в этом месяце.

А, ну это да :) Упустил из виду...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура БД для нормирования труда
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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