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
'programing' 카테고리의 다른 글
JavaScript로 리다이렉트하려면 어떻게 해야 하나요? (0) | 2023.01.25 |
---|---|
Selenium Web 드라이버 및 Java.요소(x, y)는 점(x, y)에서 클릭할 수 없습니다.다른 요소는 클릭을 받습니다. (0) | 2023.01.25 |
왜 PHP에서 sprintf 함수를 사용하는가? (0) | 2023.01.25 |
PHP의 self::$bar와 static:$bar의 차이점은 무엇입니까? (0) | 2023.01.25 |
python->SQ에서 mysql(MariaDB)에 대한 접속이 실패함cmd에 성공하는 동안 LALchemy (0) | 2023.01.25 |