Мог кто-то помогать мне с грубой схемой базы данных для приложения расписания, где я смог бы
Часы хранилища в день какое-то время период (2 недели) для различных проектов. Исключая человеком A может поместить 3 часа для projectA и 4 часа для projectB в тот же день
Сделайте его так, чтобы было легко получить отчеты об общих часах, помещенных для проекта или получить общие часы на всех проектах конкретного человека
Править: Другое требование было бы то, что каждое расписание в течение периода определенного времени для каждого человека должно иметь поле, указывающее, что человек отправил расписание и другое высказывание, что оно было утверждено
Заимствовано у Эрика Петрелье & mdma:
Employee
- EmployeeID (PK)
- EmployeeName
- Other_fields
Project
- ProjectID (PK)
- ProjectName
- Other_fields
WorkSegment
- WorkSegmentID (PK)
- ProjectID (IX1)
- EmployeeID (IX2)
- Date (IX1, IX2)
- StartTime
- EndTime
- PayrollCycleID (FK)
Первый Индекс WorkSegment - ProjectID, Date. Второй индекс WorkSegment - это EmployeeID, Date. Эти индексы не уникальны. Это сделано для того, чтобы человек мог работать над проектом более одного раза в день. Индексы позволяют сообщать о часах, отработанных по проекту или по отдельности.
Каждая строка WorkSegment относится к одному отрезку времени, одному дню, одному проекту. У каждого сотрудника столько строк WorkSegment, сколько необходимо для описания его цикла расчета заработной платы.
TimeSheetSegment
- TimeSheetSegmentID (PK)
- ProjectId (FK)
- EmployeeId (FK)
- PayrollCycleID (FK)
Существует уникальный индекс для ProjectID, EmployeeID и PayrollCycleID. Для каждого проекта, над которым работает сотрудник в течение цикла расчета заработной платы, есть одна строка TimeSheetSegment.
TimeSheet
- TimeSheetID (PK)
- EmployeeID (IX)
- PayrollCycleID (IX)
Строка TimeSheet объединяет строки TimeSheetSegment и WorkSegment. Индекс EmployeeID, PayrollCycleID уникален.
Approval
- TimeSheetID (PK)
- PayrollCycleID (FK)
- SubmittedTimestamp
- ApproverID (FK)
- ApprovedTimestamp
Строка «Утверждение» создается при отправке табеля. Эти поля могут быть частью таблицы расписания. Я разбил их с помощью нормализации четвертого порядка, потому что таблица утверждения, вероятно, будет иметь другие разрешения на доступ к базе данных, чем таблица TimeSheet.
PayrollCycle
- PayrollCycleID (PK)
- PayrollCycleYear
- PayrollCycleNumber
- StartDate
- EndDate
- DirectDepositDate
- CheckDate
- Other_fields
Таблица PayrollCycle нормализует некоторые поля даты и предоставляет целочисленный ключ, который упрощает объединение строк WorkSegment и TimeSheetSegment для создания согласованного табеля учета рабочего времени.
Стол для людей (1)
Стол для проектов (2)
Таблица для заказов (3) - кто выполнял работу (FK в 1), над каким проектом они работали (FK в 2), когда они сделали работу, сколько они сделали.
Выберите сумму (time_booked) из (3), где человек равен (некоторый идентификатор из 1) и проект = (некоторый идентификатор из 2)
или
Выберите сумму (time_booked) из (3), где человек равен ( какой-то идентификатор из 1)
и т.д ...
Вот приблизительный набросок, который даст вам хорошее начало:
Project
-------
ProjectId PK
ProjectName varchar(200)
Employee
---------
EmployeeId PK
EmployeeName (or first name/last name etc..)
// .. other employee attributes
ProjectTimesheet
----------------
ProjectTimesheetId PK
ProjectId FK -> Project.ProjectId
EmployeeId FK -> Employee.EmployeeId
StartTime DATETIME
EndTime DATETIME
Approved bit
РЕДАКТИРОВАТЬ: В качестве альтернативы утвержденному флагу в каждой строке ProjectTimesheet вы могли бы вместо этого выделить утвержденный статус в отдельную таблицу. Например, чтобы разрешить утверждение расписания сотрудника за определенный период, менеджер должен добавить запись об утверждении в таблицу утверждения:
Approval
--------
ApprovalID PK
EmployeeId FK -> Employee.EmployeeId
StartTime DATETIME
EndTime DATETIME
ApprovedBy FK -> Employee.EmployeeId (e.g. the manager)
ApprovedDate timestamp // date the approval was registered
Это немного похоже на домашнее задание, но я бы начал с чего-то вроде этого:
People
- PersonID (PK)
- PersonName
- Other fields
Projects
- ProjectID (PK)
- ProjectName
- Other fields
WorkTime
- TimeID (PK)
- ProjectID (FK)
- PersonID (FK)
- StartTime
- EndTime