Hoe maak ik een custom auto increment kolom met SQL
1.1001
is niet oplopend
Nog een voorbeeld: klant 2 bestelt order 5, klant 1 bestelt order 6:
2.5
1.6
Maar waarom maak je het jezelf zo moeilijk? Waarom gebruik je niet gewoon 1 nummer? Waarom wil je iets samenstellen?
Het gaat erom dat een getal oploopt, je kan voor de punt alles zetten wat je wilt. Een datum bijvoorbeeld of een prefix zoals order-. In dit geval een account id, volgens mij maak ik het me niet moeilijk zo hoor. Ik vind dit ook wat mooier staan op een factuur bijv, dan alleen: 1001
Dit kan prima:
ORD-2430
ORD-2431
ORD-2432
Daar zal de Belastingdienst niet moeilijk over doen.
Dit zullen ze vermoed ik niet kunnen waarderen:
22.2430
312.2431
185.2432
Ik zou het echt even navragen.
Maar wat is nu precies het probleem eigenlijk? Je kunt toch gewoon die waardes samenvoegen met een punt ertussen?
niet op MySQL.
Wel op alle andere databases zoals PostgreSQL, en zelfs op MariaDB.
Ik zie geen reden om nog MySQL te blijven gebruiken... (hint :-))
Wat je zoekt is CREATE SEQUENCE, en nee, dat werkt Wel op alle andere databases zoals PostgreSQL, en zelfs op MariaDB.
Ik zie geen reden om nog MySQL te blijven gebruiken... (hint :-))
Naast de doorlopende factuurnummering van jaar op jaar, zijn er twee minder elegante nummeringen die ook lijken te worden toegestaan: een doorlopende nummering per boekjaar (meestal gelijk aan een kalenderjaar) en een doorlopende nummering per bedrijfsactiviteit (bijvoorbeeld per filiaal, omdat ze daar zelf nummerende kassa's hebben).
De hier gebruikte nummering per klant vanaf 33.1000 voor klant 33 roept vraagtekens op omdat (a) je moet kunnen verantwoorden waar dan factuur 33.0001 tot en met 33.0999 voor klant 33 zijn gebleven en (b) je moet kunnen verantwoorden wie precies klant 1 tot en met 33 zijn.
Dat zou ik zo niet doen. Niet alleen is het hoogst ongebruikelijk (en onbekend maakt onbemind). Het is ook nergens voor nodig: de debiteurgegevens moet je sowieso al op de factuur vermelden, dus facturen nummeren per klant is dubbelop.
Dat je een dubbele auto_increment nodig hebt, is code smell, de stank van code die stinkt.
En als je dan toch iets afwijkends doet? Registreer dan altijd wie wat wanneer waarom doet. Daarmee heb je zelfs bij uitzonderlijke afwijkingen nog steeds een controleerbare audit trail. Daarvoor zijn logs bijvoorbeeld bedoeld.