programing

MariaDB - 청구서 번호 - 매년 0으로 돌아가기

yoursource 2023. 1. 25. 08:49
반응형

MariaDB - 청구서 번호 - 매년 0으로 돌아가기

안녕하세요.

견적과 청구서를 생성하는 CRM을 개발하고 있기 때문에 조언을 부탁드립니다(PHP/MariaDB).

청구서 번호를 생성하는 가장 좋은 방법은 무엇입니까(데이터베이스에 경합이 발생하지 않도록 하는 것, 번호에 중복되지 않도록 하는 것 등).

추신: 올해 초(1월 1일)마다 청구서 번호를 0으로 다시 시작했으면 합니다.그리고 CRM은 여러 점포에서 사용되므로 각 점포별로 번호를 구분하여 주십시오.

처음에는 주문표(order_invoices)에 숫자열(int)을 넣으려고 생각했습니다.PHP에서는 새로운 청구서를 작성할 때 다음과 같이 하십시오(Allustive 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(이 열은 번호의 위치를 알 수 있도록 증분됩니다).

_이 테이블에는 각 점포별로 줄(행)을 매겨주세요.

_그리고 프로그램(컨트롤러의 액션)에서 새로운 청구서를 작성하기 위해:

_청구서 생성 시작 시 (스토어 라인) 행에 잠금을 설정한다.

_카운터 테이블에서 번호를 검색하여 청구서 테이블(주문_인보이스)의 번호에 삽입하기 위한 값(+1)

어떻게 생각해?그리고 다른 의견이나 조언은 없나요?

정말 감사합니다.

스키마만:

데이터베이스 멤버:

  • main_id 자동 증가 프라이머리 키
  • 연도
  • 인덱스 오브 year
  • 고유 키(year,index_of_year)

진행 상황:

  • year가 있는 요소를 삽입하고 index_of_year를 NULL로 설정합니다.
  • 마지막으로 삽입된 ID를 CUR_로 가져옵니다.아이디
  • 레코드의 index_of_year를 max+1로 업데이트합니다.

MariaDB-10.3 Sequence 사용.

다음 송장 번호 검색 중:

NEXT VALUE FOR invoice_number

연간 이벤트 생성:

CREATE EVENT reset_invoice_number
ON SCHEDULE EVERY 1 YEAR
DO 
ALTER SEQUENCE invoice_number RESTART 0

언급URL : https://stackoverflow.com/questions/54429026/mariadb-invoice-numbers-return-to-0-each-year

반응형