首页 > 解决方案 > 将多值依赖项放在自己的表中但感到困惑

问题描述

我在 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 给了我员工和他们的工作时间,但不知道这些时间与什么日期相关,以及与这些时间相关的项目让我感到困惑。我是否错误地识别了多值依赖项?我是新手,所以我需要一些帮助。

标签: sql

解决方案


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

推荐阅读