时间表关系数据库设计

时间:2014-05-19 07:50:02

标签: sql database-design

我需要在现有的时间表数据库应用程序之上构建一些查询,以用于特定项目目的。

我可以从

的时间表数据库中删除数据
USER_ID | ENTRY_DATE | BILLED_HRS

然后将项目组织图表映射为我拥有的数据:

USER_ID | PROJECT_ROLE | START_DATE | FINISH_DATE

在START_DATE和FINISH_DATE之间加入这两者的最佳方法是将HRS映射到PROJECT_ROLE的唯一方法。

可能只有5-10个USER_ID会有多个角色,所以可能有办法快速跟踪这个。我无法修改基础时间表应用程序表,因此此连接需要足够快以便定期运行。

谢谢

1 个答案:

答案 0 :(得分:2)

您正在寻找的基本查询类似于:

SELECT ts.*, po.project_role
FROM timesheet ts
LEFT JOIN project_organization po ON
   po.user_id = ts.user_id AND
   ts.entry_date BETWEEN po.start_date AND po.finish_date

我会留下LEFT JOIN,以确保即使您没有匹配任何project_role,也不会丢失时间表数据。但要小心......如果项目组织表的行与同一user_id的start_date和finish_date重叠,则会得到重复的时间表数据。对于INNER和OUTER JOIN,这是不可避免的。

关于此查询的效率,它很大程度上取决于您拥有的索引。

作为个人建议......我建议定期(可能每晚)提取数据并在另一个数据库中复制以用于报告目的。通过这种方式,您可以检查它(显示与没有project_role匹配或匹配多个project_role的数据的警告)并清理它(直接在时间表数据表中写入project_role)。当然,如果要对实时数据运行查询,则无法执行此操作。但我也认为时间表数据每天输入的次数不超过一次,因此它可能是最好的解决方案。