在子表中重复父列

时间:2013-10-02 09:34:39

标签: sql-server sql-server-2008 database-design relational-database

我有三张桌子 期间

--------------------------------
ID StartDate   EndDate      Type
--------------------------------
1  2013-01-01   2013-01-01    D
2  2013-01-02   2013-01-02    D

出席率

---------------------------------------------------
ID PeriodID   UploadedBy   uploadDateTime    Approved
--------------------------------------------------
1      1        25          2013-01-01-11:00   1
2      1        54          2013-01-01-10:00   1

出勤明细

---------------------------------------------
ID EmployeeID   AttendanceTime   Status AttendanceID
---------------------------------------------
1      24       2013-01-01 09:05  CheckIn   1
1      28       2013-01-01 09:08  CheckOut  2

通过生物加工生成的CSV文件填写出勤数据。 Attendancedetail可能会随着时间的推移而分组,因为每位员工每天都有多次签出。每个时期period都会批准出勤率。

Qustion

我需要每个时期的出勤数据。我知道我可以实现joins。但我必须在AttendenceTime上使用between过滤器。我想在PeriodID表中添加AttendenceDetail以简化查询和未来的性能问题。我应该采用它还是有更好的解决方案

1 个答案:

答案 0 :(得分:0)

如果您经常需要根据每个时段的出勤详细信息,所以您通常需要加入三个表,但出勤数据(来自出勤表)对您来说并不那么重要,那么出勤详细信息表中的PeriodID将帮助您肯定的。

即使您需要所有三个表,PeriodID上的where条件也会缩小出勤详细信息的行数,因此它在性能方面也会有所帮助。

维护一个不完全规范化的架构可能有点烦人,但如果这不是一个很大的麻烦,这不会影响你的写作性能,那就去考勤细节中的PeriodID吧。您的选择将会感谢您:)