Денормализация для здравомыслия или производительности?

Я начал новый проект, и у них есть очень нормализованная база данных. все, что может быть поиском, сохраняется как внешний ключ для таблицы поиска. это нормально и нормально, но в итоге я делаю 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}

Я хотел бы рекомендовать, чтобы мы денормализовали некоторые вещи. как государственный код. Я не вижу, чтобы коды штатов менялись при моей жизни. похожая история с 3-х буквенным кодом агентства. они выдаются агентством агентств и никогда не изменятся.

Когда я подошел к администратору базы данных с проблемой кода состояния и 5 таблиц присоединяется. я получаю ответ, что "мы нормализованы" и что "соединения быстро".

Есть ли веский аргумент в пользу денормализации? Я сделал бы это для здравомыслия, если ничего больше.

тот же запрос в 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))

Ответы на вопрос(7)

Ваш ответ на вопрос