У меня есть следующие таблицы:
Projects(projectID, CreatedByID)
Employees(empID,depID)
Departments(depID,OfficeID)
Offices(officeID)
( "CreatedByID" - это внешний ключ для сотрудников.)
И у меня есть запрос, который мне нужно запустить почти для каждого запроса веб-приложения, которое захватывает все проекты в офисе. Неправильная практика заключается в том, чтобы просто добавить избыточный столбец "OfficeID" в проекты для устранения трех соединений? Или я должен сделать следующее?
SELECT *
FROM Projects P
JOIN Employees E ON P.CreatedBY = E.EmpID
JOIN Departments D on E.DepID = D.DepID
JOIN Offices O on D.officeID = O.officeID
WHERE O.officeID = @SomeOfficeID
Пока я не вижу проблемы с производительностью?
В прикладном программировании я всегда следую правилу "Сначала пишу с помощью лучших практик и оптимизирую", но когда дело доходит до проектирования и нормализации базы данных, я обеспокоен тем, что администраторы баз данных всегда предупреждают о стоимости объединений.