时间表的数据库模式

ran*_*ght 8 schema database-design database-schema

有人可以帮助我为一个时间表应用程序的粗略数据库架构,我将能够

  1. 为不同的项目每天存放一段时间(2周).Ex person A可以在同一天为projectA投放3个小时,为projectB投放4个小时

  2. 这样做可以很容易地获得项目总工时的报告,或者获得某个人在所有项目上的总工时

编辑:另一项要求是,每个人在特定时间段内的每个时间表都需要有一个字段,表明该人已提交了时间表,另一个表示已经批准

Gil*_*anc 10

借用Eric Petroelje和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)
Run Code Online (Sandbox Code Playgroud)

WorkSegment的第一个索引是ProjectID,Date.WorkSegment的第二个索引是EmployeeID,Date.这些索引不是唯一的.这样一个人可以在一天内不止一次地完成一个项目.索引允许报告项目或人工作的小时数.

每个WorkSegment行用于一段时间,一天,一个项目.每个员工都有尽可能多的WorkSegment行来描述他的工资单周期.

TimeSheetSegment
- TimeSheetSegmentID (PK)
- ProjectId (FK)
- EmployeeId (FK)
- PayrollCycleID (FK)
Run Code Online (Sandbox Code Playgroud)

ProjectID,EmployeeID和PayrollCycleID上有一个唯一索引.员工在工资核算周期中工作的每个项目都有一个TimeSheetSegment行.

TimeSheet
- TimeSheetID (PK)
- EmployeeID (IX)
- PayrollCycleID (IX)
Run Code Online (Sandbox Code Playgroud)

TimeSheet行将TimeSheetSegment和WorkSegment行放在一起.EmployeeID,PayrollCycleID索引是唯一的.

Approval
- TimeSheetID (PK)
- PayrollCycleID (FK)
- SubmittedTimestamp
- ApproverID (FK)
- ApprovedTimestamp
Run Code Online (Sandbox Code Playgroud)

提交时间表时会创建"批准"行.这些字段可以是TimeSheet表的一部分.我使用四阶规范化将其分解,因为Approval表可能具有与TimeSheet表不同的数据库访问权限.

PayrollCycle
- PayrollCycleID (PK)
- PayrollCycleYear
- PayrollCycleNumber
- StartDate 
- EndDate
- DirectDepositDate
- CheckDate
- Other_fields
Run Code Online (Sandbox Code Playgroud)

PayrollCycle表规范化了一些日期字段,并提供了一个整数键,可以更容易地将WorkSegment和TimeSheetSegment行组合在一起,以形成一致的时间表.