реклама
разместить

Справочник, версионность и update

В статье показан пример, раскрывающий некоторые тонкости, полезные при проектировании справочников.

Амбула

Представим, что у вас есть MVP и вы сделали справочник сотрудников для бухгалтера, самым тривиальным образом, и запустили в эксплуатацию.

Явление бухгалтера первое

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

Явление бухгалтера второе

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

Осознание

Очевидно, что исправить этот дефект можно с помощью учетного версионирования строк с указанием даты ввода в учет нового значения. Ок, дорабатываем.

Явление бухгалтера третье

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

Явление бухгалтера четвертое

Бухгалтер звонит и жалуется, что в отчетах за предыдущие кварталы отчество сотрудницы выводится неправильно.

Просветление

Тут приходит понимание, что в справочнике нужно сделать кнопку "Сохранить" немного сложнее. При нажатии кнопки необходимо спросить у пользователя, что, собственно, он хочет сделать, исправить ошибку или актуализировать значение?

  • Исправить ошибку
    В этом случае версия записи порождаться не будет, но исправление должно быть сделано в актуальной и исторических версиях.
  • Актуализировать значение
    В этом случае нужно потребовать дату ввода в учет нового значения. Будет порождена новая версия записи.

Прочие подсказки

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

Следует понимать, что учетное версионирование не заменяет механизм логирования действий пользователей.

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

  • id
    Идентификатор строки. Обязательное.
  • actual_id
    Идентификатор последней (актуальной) версии. Обязательное. Для актуальной версии id = actual_id.
  • actual_from
    Дата старта срока актуальности. Обязательное. Значение для первой версии = 2001.01.01.
  • actual_to
    Дата, до которой версия была актуальна. Обязательное. Значение для последней (актуальной) версии = 3001.01.01

Кортежи actual_id + actual_from должны быть уникальными.

Если в отчетах нужно вывести актуальные значения, то JOIN делается к id, если нужно вывести исторические значения, то JOIN делается к actual_id с добавлением условия на срок актуальности. Примерно так …

fact JOIN staff ON fact.staff_id = staff.actual_id and fact.datetime >= staff.actual_from and fact.datetime < staff.actual_to
реклама
разместить
Начать дискуссию
Онлайн-бухгалтерия в банке: почему вашему бизнесу не подойдёт такое решение и где искать альтернативу
*когда понял, что тебе что-то недоговаривали*

Никакого хейта, только факт: далеко не все предприниматели понимают, что из себя представляет онлайн-бухгалтерия в банке. За красивым интерфейсом скрываются ограничения, о которых в рекламе не говорят. Разбираемся, какие именно, и что с этим делать.

44
реклама
разместить
Онлайн бухгалтерия от банка: так ли это выгодно для бизнеса?
22
Как зарабатывать на телеграм каналах

Telegram давно перестал быть просто мессенджером. Сегодня это мощная платформа для бизнеса, творчества и, конечно же, заработка. Но как превратить обычный канал в источник дохода? Давайте разбираться!

Релиз Modus BI 3.7: новые возможности дизайна отчетов, форматирование таблиц и оптимизация форм ввода данных
Релиз Modus BI 3.7: новые возможности дизайна отчетов, форматирование таблиц и оптимизация форм ввода данных
11
Как я попытался избавиться от блокнота в бизнесе, и что из этого вышло

Эта история произошла в одном российском райцентре. Поселок и район вместе около 40 тысяч населения. Здесь я родился и вырос. После школы учился в техникуме на повара. Доучился уже после армии, начал работать по профессии.

Учетная система типа «тетрадь»: закупки, продажи, долги. Не записал? Значит, такого и не было никогда. 
1717
22
Мастер эффективного планирования личных и рабочих задач: как ничего не забыть и все держать под системным контролем?
Мастер эффективного планирования личных и рабочих задач: как ничего не забыть и все держать под системным контролем?

Зачем нужна система учета задач? Стоит ли разделять личные и рабочие задачи? Каким 3 базовым требованиям должен соответствовать сервис для управления задачами? Почему приложение Obsidian — идеальный стартовый вариант для простого и удобного учета задач?

11
Нейросети для сокращения текста: ТОП 10 лучших ИИ в 2025 году
Нейросети для сокращения текста: ТОП 10 лучших ИИ в 2025 году

В эпоху информационного перенасыщения умение кратко и ёмко излагать мысли становится всё более ценным навыком. Однако не всегда у нас есть время или способности для эффективного сокращения объёмных текстов. На помощь приходят современные нейросети, способные в считанные секунды превратить многостраничный документ в краткое и информативное резюме. В…

Как искусственный интеллект помогает бухгалтерам работать и зарабатывать

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

Как искусственный интеллект помогает бухгалтерам работать и зарабатывать
44
[]