基于日期的一对多关系

本文关键字:一对多 关系 日期 于日期 | 更新日期: 2023-09-27 18:26:25

我用 c# 编写了一个 Windows 窗体应用程序,为员工制作状态/延迟日志,现在我正在尝试向该应用程序添加一个功能,该功能执行以下操作:

  • 从数据库中获取当天的日志(谁在场,谁上班迟到(并将其分配给当天的日期,这样我就可以在每一天查看一个在场和谁上班迟到。

为了更清楚:

  • 工人表 : 其中 1 表示员工在场或延迟

ID--姓名----------存在-----延迟

1--山姆--------------1----------0---

2--千斤顶-------------0----------0---

3--泰德--------------1----------1---

  • 日期表 :

日---------------礼物----延迟-----缺席

14/10/2012---------山姆--------泰德-------杰克

------------------------泰德-----------------------

等等,我希望我把我的想法说清楚了。

第二个表将是什么样子,关系将如何?

我将如何查看日期表中的结果?

基于日期的一对多关系

--Person--          --Presence--       --Delay--
ID                  ID                 ID
Name                Date               Date
// other info       PersonID           PersonID
                    IsPresent

首先,您应该单独保存Person表,并在其他表中使用它ID。我强烈建议阅读有关数据冗余和数据库规范化的信息。 其他表中的PersonID是指表中Person ID

我认为应该每天记录Presence。 如果当天只有Person出现得很晚,则应记录Delay

你可能

想做这样的事情,可能不是100%,但应该让你朝着正确的方向前进。遇到任何其他问题,让我知道会尽我所能提供帮助

表: 员工 { ID, 姓名 }table: logs {EmployeeId, DateCreated, OnTime(如果晚了,则有点假(}

select Name
Status = CASE WHEN OnTime = 1 THEN "On Time" 
         WHEN OnTime is null THEN "Absent"
         ELSE "Late"
from Employees as e
left join Logs as l
    on e.Id = l.EmployeeId
Where l.DateCreated = @aDate
or l.DateCreated is null
然后,以

所需方式显示数据将成为报表引擎或数据透视表的任务,具体取决于要求