@Werewolfe
Погромист и любитель Linux

Как сделать нумерацию начинающуюся с нуля каждый год?

Как сделать нумерацию документов с нуля каждый год.
Сейчас в голове созрела идея, при добавлении записи в таблицу делать выборку максимального значения по колонке YI (Year index) на текущий год и затем увеличивать его.
PK  | YI |  YR  |
----|----|----- |
 1  |  1 | 2023 |
----|----|------|
 2  |  1 | 2024 |
  • Вопрос задан
  • 236 просмотров
Решения вопроса 1
@Shavadrius
Знакомая проблема: пользователи хотят видеть красиво пронумерованные документы.
За годы работы так и не сформировал единого подхода к преобразованию "непонятного" ID в "красивые циферки".
Есть такие реализации, может что подойдет:
1. Считаем порядок по счетчику, который сбрасываем в начале года. Легко реализуется. Минусы: при удалении элементов будут "дыры" в последовательности, что не нравится пользователям.
2. Считаем порядок динамически по дате добавления/утверждения записи. Легко реализуется. Минусы: при редактировании даты, добавлении документов "задним числом" нумерация поедет, что тоже не нравится пользователям.
3. Рассчитывать следующий номер документа исходя из номера последнего сохраненного (N+1). Обычно работает в паре с возможностью изменения номера руками (администратором ИС, например) - сбрасываем ответственность за нумерацию на пользователей. Полно подводных камней: от необходимости реализовать "сместить все на единичку с такого-то документа" до "нумерация поехала, исправьте".

Если запретить манипуляции с датами и удалением документов, то сбрасываемый счетчик очень хорошо себя показывает. Но это практически нереально - без манипуляций обойтись...
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@nApoBo3
Зависит от требований. Можно, как вариант, на каждый год создавать свою sequence с именем содержащим год. Создание этой sequence впихнуть в триггер на таблицу с документами,
CREATE SEQUENCE IF NOT EXISTS, и дальше брать из нее значение.
Ответ написан
@maksam07
https://stackoverflow.com/a/49046542

Здесь немного другая тема, но возможно можно модифицировать: https://stackoverflow.com/questions/57891784/custo...
Ответ написан
Комментировать
shurshur
@shurshur
Сисадмин, просто сисадмин...
Самое простое решение такое. Делаем sequence, из которого при вставке заполняем нужный номер явным вызовом nextval или дефолтным значением/триггером. И каждый год 1 января сбрасываем sequence в 0. Зачем слишком усложнять-то?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы