基于日期的一对多关系

时间:2014-10-14 14:30:32

标签: c# sql table-relationships

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

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

更清楚地说明:

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

ID - 名称----------存在-----延迟

1 - SAM -------------- 1 ---------- 0 ---

2 - 插孔------------- ---------- 0 0 ---

3 - ted -------------- 1 ---------- 1 ---

  • 日期表:

日---------------本---- -----延迟不存在

14/10/2012 --------- -------- SAM泰德-------插孔

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

等等,我希望我的想法清楚。

第二张表怎么样,关系怎么样?

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

2 个答案:

答案 0 :(得分:1)

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

首先,您应该单独保留Person表,并在其他表中使用ID。我强烈建议您阅读data redundancydatabase normalization。其他表中的PersonID引用ID表中的Person

我认为应该记录Presence每天。如果当天晚些时候只显示Delay,则应记录Person

答案 1 :(得分:0)

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

表:员工{Id,Name} table:记录{EmployeeId,DateCreated,OnTime(如果迟到则为bit false)}

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

以您希望的方式显示数据,然后根据需求成为报表引擎或数据透视表的任务