Хобрук: Ваш путь к мастерству в программировании

шаблон проектирования модели данных, который хранит изменения данных до тех пор, пока не будет авторизован другим пользователем

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

Например, если admin1 изменяет номер телефона для customer1, это изменение не вступит в силу до тех пор, пока admin2 не авторизует его.

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


Ответы:


1

Мне не известны какие-либо шаблоны проектирования, но я думаю, что у меня для вас есть другая идея -
есть еще одна таблица с именем 'Pending_Changes' со столбцами 'Table_Identifier', 'Column_Identifier' 'Record_Identifier' и 'New_Value'.
Каждая строка будет представлять собой одну изменение столбца на некоторую запись в некоторой таблице.
Например, строка со значениями ('Customers', 'Phone_Number', '12345', '077-4453432') будет использоваться для представления изменения номера телефона клиента 12345.
Пара недостатков этого метода заключается в том, что- < br> 1. все ваши таблицы должны иметь одно поле идентификатора
2. изменение одной записи может охватывать несколько строк в таблице PendingChanges, поскольку она сохраняет строку для каждого измененного значения столбца.

С другой стороны, он довольно расширяемый и довольно простой в обслуживании.

08.05.2011
  • Мне нравится тот факт, что ваш дизайн основан на единой таблице для отслеживания изменений, а недостатки моего приложения терпимы. 09.05.2011

  • 2

    Это отлично работает, когда у вас мало таблиц, но будет громоздко по мере увеличения таблиц.

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

    например У вас могут быть такие таблицы, как AuditTables, AuditColumns, AuditChanges, AuditChangesDetails и т. Д., И вы можете сохранять все необходимые изменения в этой модели, а не создавать временную таблицу, которая соответствует «живой» таблице.

    08.05.2011
  • Если я вас правильно понял, в AuditTables будет список таблиц для аудита, связанный с AuditColumns, в котором есть столбцы для аудита для каждой таблицы, связанный с AuditChanges и AuditChangesDetails для отслеживания изменений. Думаю, этого должно быть достаточно и с возможностью расширения. Мне также нравится приведенное ниже предложение sJhonny, основанное на одной таблице. Какие преимущества дает ваш подход по сравнению с этим? 09.05.2011
  • Думаю, он будет более гибким. Зайдите на сайт krell-software.com и загрузите инструмент аудита. Это не совсем то, что вам нужно, но вы будете иметь хорошее представление о том, как должна выглядеть ваша модель. 09.05.2011

  • 3

    Я разработал что-то вроде этого, и вот в чем его суть;

    1. Я создаю зеркальную таблицу для каждой таблицы, для которой я хочу иметь контроль версий на уровне строк. Допустим, у вас есть таблица CUSTOMER. Ваша зеркальная таблица управления версиями будет VER_CUSTOMER Каждая таблица, в которой я хочу иметь управление версиями на уровне строк, имеет столбец с именем RECORD_ID (GUID)
    2. Когда запись вставляется в эту таблицу, я генерирую новый GUID и заполняю это поле. Новая запись также вставлена ​​в таблицу VER_CUSTOMER с RECORD_ID, как добавлена ​​к естественному PK таблицы. Когда запись обновляется, я снова генерирую новый GUID. Заполните RECORD_ID этим новым GUID. Обновленная запись также попадает в таблицу VER_CUSTOMER.
    3. Когда запись удаляется, я помечаю запись в таблице CUSTOMER как УДАЛЕННАЯ (не удаляю запись физически). У меня есть столбец IS_DELETED в каждой таблице. Я установил для этого столбца значение ИСТИНА при попытке удаления записи. Снова копия удаленной записи также попадает в таблицу VER_CUSTOMER.
    4. Таким образом, для каждой транзакции, которая у вас есть в этой таблице, у вас есть соответствующая запись в таблице VER_CUSTOMER с RECORD_ID и естественным PK таблицы как PK. Например, если PK таблицы CUSTOMER - CUST_ID. PK VER_CUSTOMER будет составным CUST_ID и RECORD_ID.

    Надеюсь это поможет...

    09.05.2011
  • Интересный дизайн, но скорее модель контроля версий для обновлений строк в ver_tables; что, я думаю, является натяжкой для простого двухступенчатого рабочего процесса конструирования и проверки. Что вы думаете? 09.05.2011
  • Новые материалы

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

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..