Правильно ли иметь столбцы состояния или Сводки в родительской таблице или выбрать другую процедуру? - PullRequest
0 голосов
/ 05 апреля 2020

Моя родительская таблица является таблицей «Задания», и есть дочерняя таблица, в которой записываются действия задания с именем «JobActions», как показано ниже:

Задания ( JobId , JobType, CurrentStage, AssignedTo)

JobActions ( JobActionId , JobId , CreateDate, ActionType, FromUserId, ToUserId, Message, Detail)

в моей сетке на веб-странице, которую я перечисляю столбцы сетки, как показано ниже:

JobId, CreateDate, CurrentStage, AssignedTo, LastActionType, LastActionDate, ...

В сетке для расчета ниже столбцов я использую соединения с дочерней таблицей (очень медленно, когда есть много пользователей и много данных)

CreateDate ==> Первый (или мин.) JobActions 'CreateDate,

LastActionType ==> Последний JobActions' ActionType,

LastActionDate ==> Последняя (или максимальная) JobActions 'CreateDate

У меня есть около пяти столбцов, подобных этому, которым нужно много объединений с таблицами JobActions или Another, поэтому я решил изменить таблицу Job следующим образом:

Jobs (JobId , JobType, CurrentStage, Assig nedTo, CreateDate, LastActionType, LastActionDate)

последние три столбца всегда обновляются всякий раз, когда любая вакансия добавляется в JobActions.

  • Вопрос 1: Это правильная версия (я денормализовал свой таблицы?)
  • Вопрос 2. Должен ли я использовать триггер для заданий этого типа или обновить его изнутри моего кода?
  • Вопрос 3. Это наилучшая практика? Есть ли лучшее решение для этого типа проблем.

1 Ответ

0 голосов
/ 08 апреля 2020

Вопрос 3: Это лучшая практика? Есть ли лучшее решение для этого типа проблем.

«Лучшая практика» может зависеть от окружающей среды. Рекомендуется попытаться выяснить, почему VIEW является «медленным». Если вы не можете сделать это быстрее, то ваши решения кажутся хорошими (после рассмотрения других бизнес-требований).

Вопрос 1: Это правильная версия (я денормализован? мои таблицы?)

В исходном дизайне таблица JobActions будет иметь тип медленно изменяющееся измерение (SCD) Тип данных 2.

В другом случае дополнительные столбцы (в таблице «Задания») будут сродни типу данных типа SCD 4.

Ваша модель выглядит хорошо (для меня).

Вопрос 2: Должен ли я использовать триггер для заданий этого типа или следует обновить из моего кода?

Давайте начнем с "должно ли обновление быть помещено в ваш код приложения"? ИМО - нет. Все приложения должны следовать одному и тому же процессу при работе с одним и тем же набором данных. Единственный способ убедиться в этом - иметь логику обновления c в базе данных.

Должно ли оно быть в триггере? Этот ответ может быть очень мнительным.

С одной стороны, может быть легко реализовать требуемые логи обновления c в триггере. С другой стороны, реализация лога удаления c может быть затруднена / невозможна.

Благодаря michael-kutz за завершенный клик здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...