| 
 | 
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Всем привет. У меня есть сомнения по поводу моей проектировки БД, поэтому решил посоветоваться. Есть 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 месяц). В общем, кому есть что сказать - поделитесь опытом. Буду рад любым коииентариям. Если что-то непонятно - уточню. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.10.2003, 22:19 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Замечания после беглого просмотра: 1. Поле Salary.All избіточно и может нарушать логическую целостность - т.е. Сумма всех d может оказаться не равной All. 2. Под полем Workers.stavka в дальнейшем надо понимать "Текущая ставка" и завести поле Salary.stavka, под которым будем понимать "Ставка, которая была у этого работника в таком-то месяце такого-то года". После чего поле Salary.money тоже становиться избыточным. 3. Создать внешний ключ для запрета удаления записей из Workers, если есть связанные с ними записи в Salary ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 25.10.2003, 22:38 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  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. А получается, что если работнику хотя бы раз начисляли ЗП, то удалить его нельзя. А это неправильно. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.10.2003, 01:11 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  1. Для поддержки актуальности поля Salary.All придется написать триггер, который будет его модифицировать при update любого поля Salary.d*. А если его нет, то соответствуещее актуальное значение легко получается простым суммированием Salary.d*. 2. Ставка может быть различной в разные месяцы. Поэтому в Workers можно хранить текущую, а в Salary - соотвествующую месяцу. Тогда мы всегда можем вычислить актуальную для конкретного месяца зарплату на основании ставки хрянящейся в Salary и суммы отработанного времени. 3. Завести флаг "Уволен" в таблице Workers и не показывать эти записи если не надо. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 26.10.2003, 02:01 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  2 lasta: \r ДА это так, но работник уволен, поэтому он не должен отображаться в Workers.\r А получается, что если работнику хотя бы раз начисляли ЗП, то удалить его нельзя. А это неправильно.\r --\r 3. Завести флаг "Уволен" в таблице Workers и не показывать эти записи если не надо. \r \r Я также согласен с "Youry" и только могу добавить, что удалять сотрудника из БД - это несколько неправильно с точки зрения бизнеса, т.к есть пара причин по к-рым информацию об уволенном сотруднике лучше хранить какое-то время в БД компании. Помимо флага возможен еще вариант - основные данные (таблица Workers ) уволенных сотрудников переносятся в другую таблицу, например, Fired_Workers , а остальные данные связанные с ними типа з/п (таблица salary ) удаляются. Но это опять же если никогда не возникнет ситуации, когда потребуется информация о том, сколько платили зарплаты уволенному сотруднику ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 27.10.2003, 09:47 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  2lasta  Какая то структура у тебя получается.... учебная, что ли. Две таблицы - и зарплата считается. Ставка может меняться и не с 1го числа. Человек может быть в командировке или на больничном. Сверхурочные по другому тарифу. Наличие персональных надбавок, премий и т.д. и т.п. Зарплата она вообще штука специфичная, ибо зависит от многих факторов. Налоговое законодательство например, или "творческий поиск" руководства. Или у тебя задача такая упрощенная, или схема должна быть гораздо сложнее. ВСЕ ИМХО. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 27.10.2003, 10:43 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Схема рассчета действительно сильно упрощенная. Мне интересно, следует ли все данные хранить в одной таблице, или данные, которые уже не актуальны (зарплата за прошлый год), следует переносить в отдельную таблицу. Я, можно сказать новичок, и хотел поинтересоваться про уже готовые методы, применяемые в аналогичных ситуациях. Хочется сразу писать хорошо! lasta ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.10.2003, 00:21 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  2lasta  Мне интересно, следует ли все данные хранить в одной таблице, или данные, которые уже не актуальны (зарплата за прошлый год), следует переносить в отдельную таблицу. ИМХО, у каждого метода есть свои плюсы и минусы. Лишь бы работало. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.10.2003, 09:20 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ок, все спасибо, буду разбираться ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.10.2003, 17:01 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  а у меня болезненная реакция на автор писал:d1,d2,d3,d4,d5,...,d31 как по мне это пережиток Fox, по крайней мере мне достались базы с похожей структурой. лучше уже сделать отдельную таблицу с полями (работник, год, месяц, день, кол_отраб_часов) и избыточности не будет.. и работать легче с этим. Репликант писал:есть пара причин по к-рым информацию об уволенном сотруднике лучше хранить какое-то время в БД компании может и не пара.. и достаточно долгое время. Н-р: самое минимальное - 1 год для персонификации, а максимум... если не ошибаюсь данные зарплаты должны храниться что-то около 40 лет?? (поправте меня.. ) по крайней мере у меня сейчас ситуация когда люди приходят за справками по зарплате за 1996 год. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.10.2003, 18:29 | 
  
  
  
   | 
||
| 
 
Как правильно хранить статистику??? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  2Наутилус Я на Fox программировал ровно 1 семестр у универе и то только потому, что препод был (и есть. и будет) полным профаном по базам и ничего кроме Fox видеть не хотел. Просто D1,d2,....,d31 - это был лучший способ для меня хранить инфо об отработке по дням. Lasta ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 30.10.2003, 00:33 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=32&tid=1546786]:  | 
    0ms | 
get settings:  | 
    9ms | 
get forum list:  | 
    12ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    51ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    51ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 13ms | 
| total: | 156ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.