#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?