मैंने एक नई परियोजना शुरू की है और उनके पास एक सामान्यीकृत डेटाबेस है। सबकुछ जो लुकअप हो सकता है उसे लुकअप टेबल पर विदेशी कुंजी के रूप में संग्रहीत किया जाता है। यह सामान्य और ठीक है, लेकिन मैं सरलतम प्रश्नों के लिए 5 टेबल जोड़ता हूं।सैनिटी या प्रदर्शन के लिए denormalizing?
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}
मैं यह सुझाव देना चाहता हूं कि हम कुछ सामानों को denormaize। राज्य कोड की तरह। मुझे अपने जीवनकाल में बदल रहे राज्य कोड नहीं दिखते हैं। 3-अक्षर एजेंसी कोड के साथ समान कहानी। ये एजेंसियों की एजेंसी द्वारा सौंपे जाते हैं और कभी नहीं बदलेंगे।
जब मैंने राज्य कोड के मुद्दे के साथ डीबीए से संपर्क किया और 5 तालिका शामिल हो गई। मुझे जवाब मिलता है कि "हम सामान्यीकृत हैं" और "जुड़ने वाले तेज़ हैं"।
क्या denormalize करने के लिए एक आकर्षक तर्क है? अगर मैं कुछ और नहीं करता तो मैं इसे सैनिटी के लिए करूँगा।
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