MariaDB - номера счетов - возвращаются к 0 каждый год - PullRequest
0 голосов
/ 29 января 2019

Здравствуйте,

Я хотел бы получить совет, потому что я разрабатываю CRM, которая генерирует кавычки и счета-фактуры (в PHP / MariaDB).

Каков наилучший способ создания номеров счетов-фактур (чтобы в базе данных никогда не возникало конфликтов - никогда не дублируйте номер и т. д.)?

PS: я хочу, чтобы каждое начало года (01 января) начиналось снова с номеров счетов, чтобынуль.И CRM будет использоваться несколькими магазинами, я хочу отдельную нумерацию для каждого магазина.

Сначала я решил поместить столбец number (int) вмоя таблица заказов ( order_invoices ).И в PHP при создании нового счета-фактуры сделайте так (пример с Eloquent de Laravel):

$lastNumber = OrderInvoice::whereRaw(
        'number = (
            SELECT MAX(number) FROM order_invoices
        )'
    )
    ->first()
    ->number;

$orderInvoice = new OrderInvoice();
$orderInvoice->number = $lastNumber + 1;
// other... assigne values to others columns
$orderInvoice->save();

Но после размышлений я не уверен, что это лучшее решение (я использую транзакции с таким большим трафикомв CRM и нескольких участниках одновременно проверяют команду ... риск конфликта при увеличении числа счетов?).

Разработчик, которого я знаю, посоветовал мне, например, создать счетчики стол.И в этой таблице:

_Добавить в столбцы: id , number (этот столбец будет увеличен, чтобы узнать, где мы находимся в нумерации).

_В этой таблице поместите строку (строку) для каждого магазина.

_И в моей программе (действие моего контроллера) для создания нового счета:

_Для созданиязаблокировать строку (в строке магазина) в начале генерации счета-фактуры;

_Чтобы получить число из таблицы counters , и это значениевставьте его (со знаком +1) в номер таблицы счетов ( order_invoices );

Что вы думаете?А у вас есть другие идеи и советы, пожалуйста?

Большое вам спасибо.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Использование MariaDB-10.3 Последовательность .

Получение номера следующего счета :

NEXT VALUE FOR invoice_number

Создание события на год:

CREATE EVENT reset_invoice_number
ON SCHEDULE EVERY 1 YEAR
DO 
ALTER SEQUENCE invoice_number RESTART 0
0 голосов
/ 29 января 2019

Только схема:

члены базы данных:

  • main_id первичный ключ с автоинкрементом
  • год
  • index_of_year
  • уникальный ключ (год, index_of_year)

Ход выполнения:

  • Вставить элемент с годом, для index_of_year установить значение NULL
  • Получить последний вставленный идентификатор как CUR_ID
  • Обновить index_of_year записи до max + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...