схема базы данных для расписания

Мог кто-то помогать мне с грубой схемой базы данных для приложения расписания, где я смог бы

  1. Часы хранилища в день какое-то время период (2 недели) для различных проектов. Исключая человеком A может поместить 3 часа для projectA и 4 часа для projectB в тот же день

  2. Сделайте его так, чтобы было легко получить отчеты об общих часах, помещенных для проекта или получить общие часы на всех проектах конкретного человека

Править: Другое требование было бы то, что каждое расписание в течение периода определенного времени для каждого человека должно иметь поле, указывающее, что человек отправил расписание и другое высказывание, что оно было утверждено

8
задан randomThought 19 July 2010 в 15:31
поделиться

4 ответа

Заимствовано у Эрика Петрелье & 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 для создания согласованного табеля учета рабочего времени.

10
ответ дан 5 December 2019 в 12:55
поделиться

Стол для людей (1)

Стол для проектов (2)

Таблица для заказов (3) - кто выполнял работу (FK в 1), над каким проектом они работали (FK в 2), когда они сделали работу, сколько они сделали.

Выберите сумму (time_booked) из (3), где человек равен (некоторый идентификатор из 1) и проект = (некоторый идентификатор из 2)

или

Выберите сумму (time_booked) из (3), где человек равен ( какой-то идентификатор из 1)

и т.д ...

0
ответ дан 5 December 2019 в 12:55
поделиться

Вот приблизительный набросок, который даст вам хорошее начало:

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
2
ответ дан 5 December 2019 в 12:55
поделиться

Это немного похоже на домашнее задание, но я бы начал с чего-то вроде этого:

People 
  - PersonID (PK)
  - PersonName
  - Other fields

Projects
  - ProjectID (PK)
  - ProjectName
  - Other fields

WorkTime
  - TimeID (PK)
  - ProjectID (FK)
  - PersonID (FK)
  - StartTime
  - EndTime
1
ответ дан 5 December 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: