ran*_*ght 8 schema database-design database-schema
有人可以帮助我为一个时间表应用程序的粗略数据库架构,我将能够
为不同的项目每天存放一段时间(2周).Ex person A可以在同一天为projectA投放3个小时,为projectB投放4个小时
这样做可以很容易地获得项目总工时的报告,或者获得某个人在所有项目上的总工时
编辑:另一项要求是,每个人在特定时间段内的每个时间表都需要有一个字段,表明该人已提交了时间表,另一个表示已经批准
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行组合在一起,以形成一致的时间表.
归档时间: |
|
查看次数: |
18694 次 |
最近记录: |