Generowanie kolejnych liczb całkowitych zgodnie ze sztuką

0

Witajcie.
Ja mam do Was takie pytanie. Chodzi o generowanie numerów w bazie danych. Obecnie w swojej aplikacji mam to zrobione tak że stworzona jest tabela z id i jakąś wartością. Generowanie kolejnego numeru odbywa się za pomocą inserta. Na id które jest moim numerem mam autoinkrementację, zaś wartość insertuję null-em. I moje pytanie brzmi, czy jest to zgodne ze sztuką? Czy jest może jakaś inna prawidłowa metoda generowania takich numerków? Nadmienię że w tej tabeli siedzą wszystkie numery które kiedykolwiek zostały stworzone. Myślałem że nie było by lepiej po wygenerowaniu kolejnego numeru z sekwencji, usuwania poprzedniego w taki sposób aby w bazie przechowywany był wyłącznie ostatnio wygenerowany numer aby wiadomo było jaki wygenerować kolejny (poprzedni +1).

1

Ale przecież systemy bazodanowe maja takie coś out-of-the-box. Czemu piszesz to sam? o_O

0
luckuluck napisał(a):

Myślałem że nie było by lepiej po wygenerowaniu kolejnego numeru z sekwencji, usuwania poprzedniego w taki sposób aby w bazie przechowywany był wyłącznie ostatnio wygenerowany numer aby wiadomo było jaki wygenerować kolejny (poprzedni +1).

Myślę, że to by było znacznie rozsądniejsze.

0

jeśli mogą być dziury w numeracji to autoincrement, serial, sekwencje - co tam dana baza ma. Jeśli to mają być numery dokumentów, które nie mogą mieć dziur to pozostaje ręczne generowanie numeru.
My to mamy rozwiązane dodatkową tabelą z polami typu

  • typ dokumentu
  • rok
  • miesiąc
  • ostatni numer
    i teraz przy zapisie nagłówka jest robiony select for update na konkretnym polu, zwiększany numer o jeden i zapisywany dokument. Jak się powiedzie to idzie commit a jak nie to rollback i nie ma dziur w numeracji. Minus jest taki, że jeśli mamy jakiś duży dokument (albo słaby serwer), który się będzie chwile zapisywał to nikt inny nie zapisze dokumentu tego samego typu dopóki się aktualny zapis nie skończy (wtedy komunikat, żeby chwilę poczekać). No ale coś za coś

1 użytkowników online, w tym zalogowanych: 0, gości: 1