Sekwencje
- sekwencji powinieneś mieć tyle ile masz numerów startujących od jeden - resetowanie sekwencji to najgorsze co możesz zrobić. Jak masz faktury vat i korekty to MUSISZ mieć przynajmniej dwie sekwencje.
- jak się pani Krysi przypomni drugiego stycznie, że ma jeszcze fakturę, którą trzeba do grudnia dopisać (a już dodała 10 styczniowych) to jesteś w bardzo czarnej dupie - zresetowałeś sekwencję.
- jak podczas zapisu faktury cokolwiek się wywali i zrobisz rollback to NUMER JUŻ SIĘ ZWIĘKSZYŁ i masz dziurę w numeracji i jesteś w czarnej dupie.
Wszystko to można ogarnąć i się na to przygotować, tylko że nakład pracy będzie kosmiczny w porównaniu do dodatkowej tabeli z dwiema kolumnami - typ i numer, gdzie do pola typ wpiszesz cokolwiek co jednoznacznie identyfikuje numerator (np. rok, miesiąc, typ dokumentu i magazyn)
To jest bardzo wartosciowa odpowiedz oraz argumenty przeciw sekwencji. 1 i 2 punkt w sumie w moim przypadku nie dotycza sie, ale bardzo, mega sluszne uwagi. Dziki Ci za nie. Za 3 punkt, rozwalil mnie, nie pomyslalem zupelnie o rollback'u. :facepalm. Super post. Powaznie, szacun @abrakadaber !
Jeszcze, zeby tylko podsumowac. Tabela, ktora sugerujesz ma wygladac jak ponizej?
| Invoice_numbers |
| year |
| sequency |
Wszystko dalej bedzie w SQL transaki oraz lock na invoice_numbers. Cos pominalem? Nie potrzebuje typu dokumentu i brak korekt. To sa pardziej takie paragony, troche dlugo to tlumaczyc, ale sam case jest znacznie prosty niz faktury.
W sumie to jak tak mysle, to chyba pierwszy pomysl byl jednak najlepiszy. Czyli w tej samej tabeli invoice trzymac kolumne rok , sekwencje oraz numer. Pozniej lock na tablie, pobieram max(sekwencja) na dany rok i od co. Duzo faktu nie bedzie, tylko kilka na caly miesiac.
edtit
Albo w ogole 2 kolumny, bez roku, bo jest invoice_date. Nastepnie w SQL mozna pobrac invoice_date BETWEEN concat(current_year, '-01-01')::DATE AND concat(current_year, '-12-31')::DATE. Jezeli cos zwroci to git jak nie ma nic to 1 i na koniec +1.