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

有人能帮我为时间表应用程序提供一个粗略的数据库模式吗

  • 为不同的项目存储一段时间(2周)内每天的小时数。前个人A可以在同一天为项目A投入3小时,为项目B投入4小时

  • 使其易于获取一个项目的总小时数报告,或获取某个人所有项目的总小时数

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

    项目表(2)

    预订表(3)-谁做的工作(FK到1),他们做的是什么项目(FK到2),他们什么时候做的工作,他们做了多少工作

    从(3)中选择sum(time_booked),其中person等于(1中的某些id)而project=(2中的某些id)

    从(3)中选择总和(预订时间),其中人员等于(1中的某些id)


    等等。

    听起来有点像家庭作业,但我可能会从以下内容开始:

    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你可以说任何现成的软件都有这种潜力,只需不接触代码。你可以创建一个概念应用程序,然后通过从问题中学到的东西比其他任何东西都多。