将多值依赖项放在自己的表中,但感到困惑

时间:2019-04-20 23:48:38

标签: 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给我雇员及其工作时间,但不知道工时与什么日期有关,与工时有关的项目使我感到困惑。我是否误认了多值依赖项?我是新来的,所以我需要一些帮助。

1 个答案:

答案 0 :(得分:0)

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