sql - 将多值依赖项放在自己的表中但感到困惑
问题描述
我在 BCNF 中有一个表,我需要找到多值依赖项,但我不确定我是否创建了提供合理信息的新表。
我有一个员工表、项目表和一个 emp_work 表。BCNF 中的表名为 Emp_Work,我使用的是 EmpID、ProjName 和 WrkDate 的复合主键。该表显示了可以在不同日期、不同时间从事不同项目的员工。
Emp_Work (EmpID, ProjName, WrkDate, WrkHrs)
4NF 表:
EmployeeProj (EmpID, ProjName)
EmplopyeeWkDates (EmpID, WrkDate)
EmployeeHrs (EmpId, WrkHrs)
这个对吗?查看新表,我没有看到信息的真实情况。例如,一名员工在不同时间多天从事特定项目,但现在创建表格的方式我看不到信息的真实情况。EmployeeHrs 给了我员工和他们的工作时间,但不知道这些时间与什么日期相关,以及与这些时间相关的项目让我感到困惑。我是否错误地识别了多值依赖项?我是新手,所以我需要一些帮助。
解决方案
Emp_Work (id, Emp_projectId, employeeId, start_date_with_hour, end_date_with_hour)
您不需要为小时和日期创建表,您可以将其存储在一张表上
示例视觉
id, emp_projectId, employeeId, start_date_with_hour, end_date_with_hour
1, 1, 1, 21-04-2019 13:00, 21-04-2019 17:00
2, 1, 1, 22-04-2019 13:00, 22-04-2019 19:00
Employee1 started to working at 21-04-2019 13:00 and finished work at 21-04-2019 17:00 for project1
Employee1 started to working at 22-04-2019 13:00 and finished work at 22-04-2019 19:00 for project1
示例 sql 代码
Get how many hours worked at date
Select *, datediff(hour,end_date_with_hour, start_date_with_hour) as workHour from emp_work where EmployeeId = 1 and emp_projectId = 1
Result :
1, 1, 1, 21-04-2019 13:00, 21-04-2019 17:00, 4
2, 1, 1, 22-04-2019 13:00, 22-04-2019 19:00, 6
推荐阅读
- python - Seaborn 点图中的分离点和误差条问题
- c++ - 调整二维动态数组大小的奇怪“e+08”值
- javascript - 如何在 StencilJS 中为第三方库分离包
- oracle - Oracle:如何 DEREF VARRAY 的 REF 和嵌套的 REF 表?
- r - R中的“ggplot()”图中的轴标签中有两个或多个换行符和斜体字
- c# - 从重叠的日期范围列表中查找日期范围
- dart - 总和计算错误
- azure-application-insights - 在 kql 中,如何将“make-series”转换为表格?
- delphi - 如何使用 RTTI 将事件处理程序分配给事件属性?
- java - 执行 mvn install 时,PKIX 路径构建失败