powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно хранить статистику???
11 сообщений из 11, страница 1 из 1
Как правильно хранить статистику???
    #32305228
lasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
У меня есть сомнения по поводу моей проектировки БД, поэтому решил посоветоваться.
Есть 2 таблицы:
1. Workers - содержит инфо о все работниках фирмы (kod,fio,stavka,address,phone).
2. salary - содержит инфо про начисление зарплаты (kod,fio_kod,month,year,d1,d2,d3,d4,d5,...,d31,All,money). (Несущественные поля я опущу, что бы не загружать лишним).
d(i) - это кол-во часов, которые работник отработал i-того числа в месяце month и году year.
all - суммарное кол-во часов.
money - деньги, которые работник заработал.
Надеюсь, что все понятно.
Проблема заключается в том, как правильно хранить статистику.
Сейчас она хранится в этойже самой таблице Salary вместе с данными текущего месяца, просто month и year у нее другие.

1. Что будет, если, допустим, работника AAA уволят из штата? Соответственно потеряется все инфо о том, как он работал( Записи в Salary останутся, но для кого они велись определить будем невозможно).

2. Что будет, если пользователь захочет в 5 месяце перерасчитать зарплату за 4 месяц?? (Допустим вышли непонятки с кол-вом отработанных часов, работник недоводен и, например, 3.05 заново производят перерасчет за 4 месяц).
В общем, кому есть что сказать - поделитесь опытом.
Буду рад любым коииентариям. Если что-то непонятно - уточню.
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32305234
Youry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечания после беглого просмотра:

1. Поле Salary.All избіточно и может нарушать логическую целостность - т.е. Сумма всех d может оказаться не равной All.
2. Под полем Workers.stavka в дальнейшем надо понимать "Текущая ставка" и завести поле Salary.stavka, под которым будем понимать "Ставка, которая была у этого работника в таком-то месяце такого-то года". После чего поле Salary.money тоже становиться избыточным.
3. Создать внешний ключ для запрета удаления записей из Workers, если есть связанные с ними записи в Salary
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32305260
lasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Поле Salary.All избіточно и может нарушать логическую целостность - т.е. Сумма всех d может оказаться не равной All.

Поле Salary.All как раз и рассчитывается, как сумма все d(i).

2. Под полем Workers.stavka в дальнейшем надо понимать "Текущая ставка" и завести поле Salary.stavka, под которым будем понимать "Ставка, которая была у этого работника в таком-то месяце такого-то года". После чего поле Salary.money тоже становиться избыточным.

На счет Salary.money - значение этого поля отлично от Workers.stavka:
Workers.Stavka - номинальный оклад
Salary.money - сколько работник реально получил вза месяц.
А на счет Salary.stavka - это может быть дельным.

3. Создать внешний ключ для запрета удаления записей из Workers, если есть связанные с ними записи в Salary

ДА это так, но работник уволен, поэтому он не должен отображаться в Workers. А получается, что если работнику хотя бы раз начисляли ЗП, то удалить его нельзя. А это неправильно.
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32305267
Youry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Для поддержки актуальности поля Salary.All придется написать триггер, который будет его модифицировать при update любого поля Salary.d*. А если его нет, то соответствуещее актуальное значение легко получается простым суммированием Salary.d*.
2. Ставка может быть различной в разные месяцы. Поэтому в Workers можно хранить текущую, а в Salary - соотвествующую месяцу. Тогда мы всегда можем вычислить актуальную для конкретного месяца зарплату на основании ставки хрянящейся в Salary и суммы отработанного времени.
3. Завести флаг "Уволен" в таблице Workers и не показывать эти записи если не надо.
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32305661
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 lasta: \r
ДА это так, но работник уволен, поэтому он не должен отображаться в Workers.\r
А получается, что если работнику хотя бы раз начисляли ЗП, то удалить его нельзя. А это неправильно.\r
--\r
3. Завести флаг "Уволен" в таблице Workers и не показывать эти записи если не надо.
\r
\r
Я также согласен с "Youry" и только могу добавить, что удалять сотрудника из БД - это несколько неправильно с точки зрения бизнеса, т.к есть пара причин по к-рым информацию об уволенном сотруднике лучше хранить какое-то время в БД компании. Помимо флага возможен еще вариант - основные данные (таблица Workers ) уволенных сотрудников переносятся в другую таблицу, например, Fired_Workers , а остальные данные связанные с ними типа з/п (таблица salary ) удаляются. Но это опять же если никогда не возникнет ситуации, когда потребуется информация о том, сколько платили зарплаты уволенному сотруднику
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32305734
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2lasta
Какая то структура у тебя получается.... учебная, что ли. Две таблицы - и зарплата считается.
Ставка может меняться и не с 1го числа. Человек может быть в командировке или на больничном. Сверхурочные по другому тарифу. Наличие персональных надбавок, премий и т.д. и т.п. Зарплата она вообще штука специфичная, ибо зависит от многих факторов. Налоговое законодательство например, или "творческий поиск" руководства.
Или у тебя задача такая упрощенная, или схема должна быть гораздо сложнее.
ВСЕ ИМХО.
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32308176
lasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схема рассчета действительно сильно упрощенная.
Мне интересно, следует ли все данные хранить в одной таблице, или данные, которые уже не актуальны (зарплата за прошлый год), следует переносить в отдельную таблицу. Я, можно сказать новичок, и хотел поинтересоваться про уже готовые методы, применяемые в аналогичных ситуациях. Хочется сразу писать хорошо!
lasta
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32308302
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2lasta
Мне интересно, следует ли все данные хранить в одной таблице, или данные, которые уже не актуальны (зарплата за прошлый год), следует переносить в отдельную таблицу.
ИМХО, у каждого метода есть свои плюсы и минусы. Лишь бы работало.
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32309382
lasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, все спасибо, буду разбираться
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32309550
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а у меня болезненная реакция на
автор писал:d1,d2,d3,d4,d5,...,d31
как по мне это пережиток Fox, по крайней мере мне достались базы с похожей структурой.
лучше уже сделать отдельную таблицу с полями (работник, год, месяц, день, кол_отраб_часов)
и избыточности не будет.. и работать легче с этим.
Репликант писал:есть пара причин по к-рым информацию об уволенном сотруднике лучше хранить какое-то время в БД компании
может и не пара.. и достаточно долгое время. Н-р: самое минимальное - 1 год для персонификации, а максимум... если не ошибаюсь данные зарплаты должны храниться что-то около 40 лет?? (поправте меня.. )
по крайней мере у меня сейчас ситуация когда люди приходят за справками по зарплате за 1996 год.
...
Рейтинг: 0 / 0
Как правильно хранить статистику???
    #32309673
lasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Наутилус

Я на Fox программировал ровно 1 семестр у универе и то только потому, что препод был (и есть. и будет) полным профаном по базам и ничего кроме Fox видеть не хотел.
Просто D1,d2,....,d31 - это был лучший способ для меня хранить инфо об отработке по дням.
Lasta
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно хранить статистику???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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