Утверждение обновления записи проекта - PullRequest
0 голосов
/ 26 августа 2018

Постановка задачи:
Всегда утверждать обновления записи до того, как изменения будут отражены в основной записи. Хотите попробовать решить эту проблему с помощью базы данных SQL.
Например. Пользователь: {"name": "Ravi Kumar", "city": "Bangalore"} Скажем, мы хотим обновить город до «Дели», но он должен пройти утверждение, прежде чем он будет отражен в основной записи.

После утверждения. Это должно показать: Пользователь: {"name": "Ravi Kumar", "city": "Delhi"}

Необходимые функции:

  1. Изменения должны быть утверждены, прежде чем они будут отражены в основной записи
  2. контрольный журнал записи, которую необходимо вести
  3. как поддерживать объединения таблиц? Что делать, если запись выбирается путем объединения нескольких таблиц? В основном, если нормализуется дБ.

Возможные решения:

  1. Имейте дополнительную колонку "утверждено" в таблице. Все утвержденные записи будут иметь статус 1, а остальные - 0. Чтобы получить текущую запись, мы должны получить запись с самой последней отметкой времени с утвержденным = 1.

  2. Имеют 2 таблицы, одна из которых содержит основную таблицу, а другая - для утверждений. Когда кто-то одобряет, мы вносим изменения в запись в основной таблице.

Вопросы:

  1. Как включить объединения, когда происходит нормализация? Это просто или сложно, когда объединения должны? Это вообще возможно?
  2. В случае объединений, можем ли мы по-прежнему использовать ORM, такие как Hibernate?
  3. Если имеется несколько обновлений, ожидающих утверждения для одной и той же записи, и каждое обновление изменяет различные наборы полей. Если все записи утверждены, то рассматриваемая запись может иметь только последние изменения обновления (при условии, что используется одно из указанных выше решений).

    Например. В основной таблице есть запись, для которой нет неутвержденных записей. Теперь пользователь меняет свойство, скажем «имя», и отправляет его на утверждение. Другой пользователь меняет свойство «город» и представляет на утверждение. Другой пользователь меняет свойство «зарплата» и представляет на утверждение. Все неутвержденные записи утверждены. Теперь последнее обновление (которое изменило свойство зарплаты), это изменение содержит старое имя, а не то, которое есть в первом обновлении. Как получить все утвержденные изменения.
    Это может быть достигнуто путем сохранения только измененных свойств вместо целых. Но это идет со стоимостью большего количества изменений кода.

Как эти проблемы решаются в отрасли?

Похожие вопросы:
Каков наилучший способ хранения изменений в записях базы данных, которые требуют одобрения, прежде чем их можно будет увидеть?
Структура для обработки изменений в записях, требующих утверждения

1 Ответ

0 голосов
/ 26 августа 2018

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

Эти записи "ожидающих изменений" могут (должны) включать дополнительную информацию о транзакции изменений, например, кто ее предложил и когда.

Ваш процесс обработки всех этих изменений, особенно конфликтующих или перекрывающихся изменений, будет зависеть от ваших бизнес-правил, которые вы не указали окончательно. Варианты включают в себя:

  • Запретить второе изменение, пока оно находится в ожидании
  • Последнее одобренное изменение выигрывает
  • Изменения должны утверждаться последовательно, с наложением ранее ожидаемых изменений поверх официальных данных, так что существует предположение, что все более ранние изменения будут утверждены до применения более поздних изменений

Что касается нормализованных баз данных и объединений, это не представляет особых проблем в вашем случае. Вы присоединитесь к таблицам, содержащим официальные, утвержденные данные, как в любом случае. Если вы хотите присоединиться к промежуточной / предварительно утвержденной версии записи, вы должны создать представление, отражающее эти изменения, перекрывающиеся с официальными данными, а затем присоединиться к этому представлению.

...