Radim bazu u kojoj se vrsi evidencija dokumentacije. Korisnički zahtev je takav da je potrebna numeracija dokumenata na sledeći način: prva četiri broja jesu godina, druga dva su mesec a sledeća četiri jesu broj dokumenta - u tom mesecu. Obzirom da nije veliki broj dokumenata, sigurno ih mesečno biti više od 10.000 tako da je dovoljno četiri cifre za numeraciju.
Primer:
2007080001
2007080002
.
.
.
2007089999
2007090001
.
.
.
2007099999
Takođe, zahteva se da korisnik NE UNOSI sam numeraciju (tj. da ne pamti koji je poslednji broj) već da sistem sam da "predlog" koji bi to broj bio, ujedno i korišćen kao primarni ključ.
Prvih 6 cifara u numeraciji se lako dobijaju primenom SELECT FORMAT(DATE(), "YYYY") i SELECT FORMAT(DATE(), "MM")- (ovo je pseudo-SQL kod, ne zamerite mi, znate na šta mislim).
E sad, interesuje me kako da dođem do numeracije samog dokumenta?
Rešenje 1) za svaki INSERT treba da se odradi sledeci pseudo-SQL:
SELECT MAX(id) FROM tabela WHERE datum LIKE "2007-08"
... pa da tom broju dodam 1 i da onda CONCAT-ujem taj broj sa datumom i tako ga snimim u tabelu? Ovo rešenje mi se čini nezgrapnim, jer za svaki unos treba da se prođe kroz celu bazu da bi se pronašao sledeći broj, čini mi se da to i nije baš optimalno.
Rešenje 2) - da u nekoj sporednoj tabeli čuvam poslednji unos koji je sačuvan u bazi, i da ga prilikom svakog INSERT-a povećavam za 1? Ovo drugo rešenje mi se čini optimalnije, ali sam hteo da postujem ovde svoje mišljenje, pa da neko od vas prokomentariše.
Pozdrav, očekujem komentare, pro & contra, i ako neko ima neko drugo rešenje/predlog neka postuje! Unapred hvala!
(c) Alan ford