Database design 时间表的数据库模式
有人能帮我为时间表应用程序提供一个粗略的数据库模式吗Database design 时间表的数据库模式,database-design,schema,database-schema,Database Design,Schema,Database Schema,有人能帮我为时间表应用程序提供一个粗略的数据库模式吗 为不同的项目存储一段时间(2周)内每天的小时数。前个人A可以在同一天为项目A投入3小时,为项目B投入4小时 使其易于获取一个项目的总小时数报告,或获取某个人所有项目的总小时数 编辑:另一个要求是,每个人在特定时间段内的每个时间表都需要有一个字段,表明该人已提交时间表,另一个字段表示该时间表已被批准(1) 项目表(2) 预订表(3)-谁做的工作(FK到1),他们做的是什么项目(FK到2),他们什么时候做的工作,他们做了多少工作 从(3)中选择s
等等。听起来有点像家庭作业,但我可能会从以下内容开始:
People
- PersonID (PK)
- PersonName
- Other fields
Projects
- ProjectID (PK)
- ProjectName
- Other fields
WorkTime
- TimeID (PK)
- ProjectID (FK)
- PersonID (FK)
- StartTime
- EndTime
以下是一个粗略的草图,它将为您提供一个良好的开端:
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
编辑:作为每个项目时间表行中批准标志的替代,您可以将批准状态分离到单独的表中。例如,要允许在给定时间段内批准员工的时间表,经理将向批准表中添加批准条目:
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
向Eric Petroleje&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)
工作段的第一个索引是projectd,Date。工作段的第二个索引是EmployeeID,Date。这些索引不是唯一的。这样,一个人可以在一天内完成一个项目不止一次。索引允许按项目或人员报告工作小时数
每个工作段行用于一段时间、一天、一个项目。每个员工都有描述其工资周期所需的任意多个工作段行
TimeSheetSegment
- TimeSheetSegmentID (PK)
- ProjectId (FK)
- EmployeeId (FK)
- PayrollCycleID (FK)
TimeSheet
- TimeSheetID (PK)
- EmployeeID (IX)
- PayrollCycleID (IX)
ProjectID、EmployeeID和PayrollCycleID上有一个唯一的索引。员工在工资周期内为其工作的每个项目都有一个时间表段行
TimeSheetSegment
- TimeSheetSegmentID (PK)
- ProjectId (FK)
- EmployeeId (FK)
- PayrollCycleID (FK)
TimeSheet
- TimeSheetID (PK)
- EmployeeID (IX)
- PayrollCycleID (IX)
时间表行将时间表段和工作段行合并在一起。EmployeeID、PayrollCycleID索引是唯一的
Approval
- TimeSheetID (PK)
- PayrollCycleID (FK)
- SubmittedTimestamp
- ApproverID (FK)
- ApprovedTimestamp
提交时间表时将创建审批行。这些字段可以是时间表表的一部分。我用四阶规范化将它们打破,因为Approval表可能具有与TimeSheet表不同的数据库访问权限
PayrollCycle
- PayrollCycleID (PK)
- PayrollCycleYear
- PayrollCycleNumber
- StartDate
- EndDate
- DirectDepositDate
- CheckDate
- Other_fields
PayrollCycle表规范化了一些日期字段,并提供了一个整型键,可以更轻松地将工作段和时间表段行组合在一起,形成一个一致的时间表。以下代码是从开源系统中以PostgreSQL语法提取并编辑的 请注意带有批准/确认信息的“conf_objects”表。当用户“提交”时间表时,所有提交的小时数都分配给一个新的conf_对象。主管的工作是将conf_对象的状态设置为“已批准”。主管或用户都可以随时删除conf_对象,这将再次将小时标记为“未提交”(hour.conf_object_id=NULL),这样这些小时将在“未提交小时”报告中结束
原稿]po[SQL语句包含在~/packages/intranet-*/SQL/postgresql/intranet-*-create.SQL创建脚本中。我如何为某个人的特定时间表指明该时间表已由该人提交?您可以向ProjectTimesheet表中添加一个approved标志,以指示该时间表已被批准。该过程是,时间表为submitted-approved==0。经理批准的时间表:approved==1。但我需要跟踪每一天的小时数。是项目时间表中一个时段(2周)的一行或者针对个别日期?如果是针对天,则每次有人提交时间表时,我都必须更新14行“已批准”列。对不起,我本想再解释一点,但却分心了。项目时间表中的每一行都是针对一个已完成的项目。开始时间/结束时间假定为同一天,因此一个项目已完成超过一天“多天”包括多行。是的,批准一个2周的周期将涉及更新14行。另一种方法是将“批准”分离到一个单独的表中,我将其添加为编辑。@TP-最好只更新所有14行,而不是单独的批准表。更新14行没有什么大不了的-数据库就是为这种类型而设计的是的。我该如何为一个人的特定时间表指明该时间表是由该人提交的?我将无法在工作时间表中完成它。@TP-如果不是该人,还有谁会提交它?PersonID已经在工作时间表上了。我的意思是,该人可以填写它,但必须提交批准val.@TP-然后您只需将“提交”字段与“批准”字段一起添加到工作时间表中(正如其他人所建议的)您不能只提交和批准,您需要一个返回的流程。否则,审批流程就没有意义。您无法在不全面了解法律要求、合同要求、内部控制、时间表欺诈以及如何防止欺诈和审核的情况下设计时间表应用程序。所有这些都对设计至关重要一个时间表应用程序。最好从做过法律研究的人那里购买一个时间表应用程序,这些法律研究是你自己成长所必需的,并且会产生比你现在想象的更多的问题。@HLGEM你可以说任何现成的软件都有这种潜力,只需不接触代码。你可以创建一个概念应用程序,然后通过从问题中学到的东西比其他任何东西都多。