我已經開始一個新項目,他們有一個非常規範化的數據庫。所有可以作爲查找的內容都將作爲查找表的外鍵存儲。這是正常化和罰款,但我最終爲最簡單的查詢做了5個表連接。非正常化的理智或表現?
from va in VehicleActions
join vat in VehicleActionTypes on va.VehicleActionTypeId equals vat.VehicleActionTypeId
join ai in ActivityInvolvements on va.VehicleActionId equals ai.VehicleActionId
join a in Agencies on va.AgencyId equals a.AgencyId
join vd in VehicleDescriptions on ai.VehicleDescriptionId equals vd.VehicleDescriptionId
join s in States on vd.LicensePlateStateId equals s.StateId
where va.CreatedDate > DateTime.Now.AddHours(-DateTime.Now.Hour)
select new {va.VehicleActionId,a.AgencyCode,vat.Description,vat.Code,
vd.LicensePlateNumber,LPNState = s.Code,va.LatestDateTime,va.CreatedDate}
我想推薦我們確定一些東西。像州代碼一樣。我沒有看到我的有生之年改變了州代碼。與三字母機構代碼類似的故事。這些是由代理機構發放的,不會改變。
當我與國家代碼問題和5表連接的DBA接近。我得到了「我們正常化」和「加入速度很快」的迴應。
是否有一個引人注目的非規範化論據?如果沒有其他的事情,我會爲了理智而去做。
在T-SQL相同的查詢:
SELECT VehicleAction.VehicleActionID
, Agency.AgencyCode AS ActionAgency
, VehicleActionType.Description
, VehicleDescription.LicensePlateNumber
, State.Code AS LPNState
, VehicleAction.LatestDateTime AS ActionLatestDateTime
, VehicleAction.CreatedDate
FROM VehicleAction INNER JOIN
VehicleActionType ON VehicleAction.VehicleActionTypeId = VehicleActionType.VehicleActionTypeId INNER JOIN
ActivityInvolvement ON VehicleAction.VehicleActionId = ActivityInvolvement.VehicleActionId INNER JOIN
Agency ON VehicleAction.AgencyId = Agency.AgencyId INNER JOIN
VehicleDescription ON ActivityInvolvement.VehicleDescriptionId = VehicleDescription.VehicleDescriptionId INNER JOIN
State ON VehicleDescription.LicensePlateStateId = State.StateId
Where VehicleAction.CreatedDate >= floor(cast(getdate() as float))
+1。好問題。 – David 2009-10-15 21:49:36