Размещают многозначные зависимости в своих таблицах, но чувствуют себя сбитыми с толку

#sql

#sql

Вопрос:

У меня есть таблица в BCNF, и мне нужно найти многозначные зависимости, но я не уверен, создал ли я новые таблицы, которые предоставляют разумную информацию.

У меня есть таблица employee, таблица projects и таблица 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:

 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
  

Комментарии:

1. Спасибо. Итак, отработанные даты и отработанные часы могут оставаться в таблице с Employee_ID ? Если это так, будет ли таблица в 4NF?