Как нормализовать данные Табеля учета рабочего времени?

dba.stackexchange https://dba.stackexchange.com/questions/7471

Вопрос

Мне ужасно трудно найти подходящий способ хранения этих данных в базе данных.

Текущая версия Excel (простая) выглядит примерно так:

http://i.stack.imgur.com/BEZOw.png

У персонала и Клиента также есть дополнительные данные, связанные с ними, поэтому имеет смысл использовать там связь с внешним ключом.Однако я не уверен, как хранить данные о часах.Очевидно, что вы могли бы создать столбец для каждого периода времени, однако это кажется очень раздутым подходом.

Затем я подумал, что каждая "ячейка", содержащая данные о часах, может быть представлена следующим образом:

http://i.stack.imgur.com/4VTXQ.png

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

* Извините, что не размещаю прямые ссылки на изображения, у меня недостаточно репутации на этом подсайте

Это было полезно?

Решение

Вы хотите иметь что-то вроде этого:

ERD

Это позволяет вам иметь любое количество периодов работы для каждого сотрудника и клиента и предоставляет вам подробную информацию о том, кто на кого работал и как долго (не говоря уже о том, когда - что также очень важно!).

Другие советы

Я бы использовал для этого минимум две таблицы.Идентификатор пользователя будет ссылкой на ваши пользовательские таблицы.

CREATE TABLE TimeSheet(
    [ID] [int] IDENTITY(1,1) NOT NULL,  
    [UserID] [int] NOT NULL,
    [StartDate] [datetime] NOT NULL,
    [EndDate] [datetime] NOT NULL)

CREATE TABLE TimeSheet_Detail(
    [ID] [int] IDENTITY(1,1) NOT NULL,  
    [TimeSheetID] [int] NOT NULL,
    [Hours] [float] NOT NULL)   

Что - то вроде этого:

Employees { Staff } KEY { Staff } ;

Clients { Client } KEY { Client } ;

StaffAssignments { Client , Staff } 
   KEY { Client , Staff } 
   FOREIGN KEY { Client } REFERENCES Clients ,
   FOREIGN KEY { Staff } REFERENCES Employees ;

Timesheets { Client , Staff , Sequence , TimeGranule } 
   KEY { Client , Staff , Sequence } 
   FOREIGN KEY { Client , Staff } REFERENCES StaffAssignments ,
   CONSTRAINT Sequence >= 1 AND Sequence <= 55 , 
   CONSTRAINT TimeGranule > 0 ;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top