我有這些表:(「CreatedByID」是foreign key員工)在數據庫設計中採取規範化有多遠?
Projects(projectID, CreatedByID)
Employees(empID,depID)
Departments(depID,OfficeID)
Offices(officeID)
而且我有一個查詢,我需要爲Web應用程序的幾乎所有要求,抓住所有運行項目在辦公室。僅僅爲項目添加一個冗餘的「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
直到我注意到性能問題?在應用程序編程中,我總是遵循「先用最佳實踐編寫,然後再優化」的規則,但是當涉及到這樣的數據庫設計和規範化時,我會擔心,因爲數據庫管理員總是警告連接的成本。
我試圖讓SQL顯示格式,但stackoverflow編輯器一直把它放在一行。 – Element 2009-01-30 18:05:23
縮進這些具有四個空格的行,使其顯示爲「代碼塊」。 – 2009-01-30 18:09:05
您需要更好的dbas,數據庫中預計會有連接,並且它們已經過優化以使用它們。如果你的dbas沒有索引(FKS需要索引)或者數據很大,它們的成本非常高。即使在那裏,我也知道數據庫的大小是terrbytes,並且仍然使用連接。 – HLGEM 2013-08-07 17:17:58