V razvoju prej ali slej naletimo na problem, ko moramo zapise številčiti. Vsakemu dokumentu pač moramo določiti edinstveno številko, ki pa mora biti ob tem še zaporedna.
Vse SQL podatkovne baze poznajo avtomatično številčenje primernega ključa – ko torej v tabelo dodamo nov zapis, slednji dobi naslednjo zaporedno številko. To imenujemo tehnično številčenje zapisov. Problem pa se pojavi, ko potrebujemo vsebinsko številko dokumenta.
Za lažje razumevanje problema, si predstavljajmo tipično podatkovno tabelo, v kateri imamo poslovne dokumente – predračune, račune, dobavnice… Vsi različni dokumenti so v isti tabeli, a vsak med njimi mora imeti lastno vsebinsko številko. Primer:
# DOKUMENT VSEB. ŠT. OSTALI PODATKI
1 Predračun PR-1/2013 ... itd ...
2 Predračun PR-2/2013 ... itd ...
3 Račun RA-1/2013 ... itd ...
4 Dobavnica DO-1/2013 ... itd ...
5 Predračun PR-3/2013 ... itd ...
6 Predračun PR-4/2013 ... itd ...
7 Račun RA-2/2013 ... itd ...
8 Dobavnica DO-2/2013 ... itd ...
9 Dobavnica DO-3/2013 ... itd ...
Kot je lepo vidno v tabeli ima vsak tip dokumenta lastno številčenje.
Kako določiti vsebinsko številko?
Opcij je seveda več a nekako jih lahko uredimo v tri sklope:
- Sekvence – če jih podatkovna baza podpira.
- Lastna tabela za vsak tip številčenja – za vsak tip dokumenta narediti lastno tabelo, ki določi naslednjo številko
- Ena tabela za vso številčenje – za vse številčenje uporabiti eno samo tabelo
Sekvence
Dobro
- Rešitev namenjena temu konkretnemu problemu
Slabo
- Ne poznajo jo vse podatkovne baze
Lastna tabela za vsako številčenje
Dobro
- Deluje v vseh SQL bazah
- Zelo podobna rešitev kot sekvence
Slabo
- Veliko malih tabel
- Vse tabele je potrebno ustvariti vnaprej ali pa v programu vedno preverjati ali tabela obstaja ali ne.
Za vso številčenje uporabiti eno samo tabelo
Dobro
- Deluje v vseh SQL bazah
- Preprosta rešitev
- Ni veliko dodatnega dela
Slabo
- Ni primerna za SQL baze z veliko hkratnimi uporabniki
V naslednjih prispevkih bom podrobneje predstavil vsako izmed možnosti…
2 thoughts on “Številčenje v SQL podatkovnih bazah”