Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Postgres potrafi pilnowac numeracji?
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
vailor
Witam,

Mam w bazie przechowywac numery dokumentow:

Numer zbudowany jest

Int_Int_Int_Int_Int/Char_Char/... dodatkowe czlony moga wystepowac ale nie musza

np

12345/ss/mm/kd
12345/ss/nn

Czy jest mozliwosc zbudowania pola ktore pilnowalo by numeracji, (numeracja dotyczy wartosci cyfrowej, znaki sa zmienne poza ich formatem)?
Czy raczej kazdy czlon ('/') trzeba zapisac w oddzielnym polu.


Vailor
kszychu
Pole autoincrement?
SongoQ
@kszychu O to dziwne bo juz przez ladnych pare lat siedze w PG i jakos nigdy nie spotkalem sie z czyms takim jak autoincrement. Radze na przyszlosc zebys sie zastanowil co piszesz bo wprowadzasz ludzi w blad.

Odnosnie tematu mozesz napisac tiggera ktory po dodaniu rekordy by to sprawdzal, nadawal numer ale bedzie problem z "/".

Mozesz inaczej jak dodajesz rekord parametry, czyli czlony numeru (/ss/mm/kd) przekazujesz do funkcji ktora odwoluje sie do sekwencji i na tej podstawie okreslasz jaki bedzie caly numer i zwracasz ten numer.
vailor
hmm.. generalnie wlasnie myslalem o trzech polach jeden z numerem drugi ze stringiem, numer mialby funkcje do numeracji, trzecie zawieraloby pelny numer wypelniany triggerem z poprzednich.


Tylko zastanawialem sie czy PG nie ma jakiegos automatu na taka okolicznosc smile.gif
SongoQ
Cytat
Tylko zastanawialem sie czy PG nie ma jakiegos automatu na taka okolicznosc

Chodzi Ci o taka nieliczbowa sekwencje?

Mozesz to inaczej rozwiazac numer zapisywac z seqwencji lub obliczac na podstawie danych a w 2 polu zapisywac dalsza czesc. Pracowalem nad systemem fakturyjacym i tam byl podobny problem. Problem rozwizalismy w ten spsob ze nazwa (numer faktury) jest skladowa kilku tabel. To jak jest nadawane to juz pilnuja triggery i funkcje. Mysle ze mozesz to podobnie zrobic. Podczas wyciagania danych poprostu to laczysz, najgorsze jest wyszukiwanie takiego czegos bo trudno jest taki index zbudowac. Ale jak dobrze pokombinujesz to czasy sa znosne.

Mam takie pytanie odnosnie tego co tworzysz. Projekt firmowy, prywatny? Jestem ciekaw bo zauwazylem ze sporo firm ugryzlo ten temat.
Seth
Cytat(SongoQ @ 2005-04-22 19:49:15)
...Podczas wyciagania danych poprostu to laczysz, najgorsze jest wyszukiwanie takiego czegos bo trudno jest taki index zbudowac...

A probowales z widokami ? Wydaje mi sie to najrozsadniejszym rozwiazaniem.
vailor
Projek firmowy.

Zrobilem to tak jak wczesniej pisalem.

Trzy pola.
numer_kolejny (varchar)- zawiera caly numer (1234/ss/ss), pole nie jest konieczne bo mozna skladac je w trakcie wyswietlania ale ze zwzgledu na wiele relacji i wygode dodalem je.

numer_int - czesc liczbowa, kolejny numer dodaje funkcja max(numer_int)+1
numer_str - czesc znakowa, dowolny text

Triggery zalozylem na pola numer_int i numer_str, funkcje trigerra po zmianie ktoregos z pol generuja nowy numer w numer_kolejny.
SongoQ
@Seth
Cytat
A probowales z widokami ? Wydaje mi sie to najrozsadniejszym rozwiazaniem.


Co do wyciagania no to niw widze lepszego sposoby jak wykorzystac widok, ale odnosnie indeksowania to niestety to mi nie zalatwi.

@vailor
Cytat
numer_kolejny (varchar)- zawiera caly numer (1234/ss/ss), pole nie jest konieczne bo mozna skladac je w trakcie wyswietlania ale ze zwzgledu na wiele relacji i wygode dodalem je.

Na Twoim mejscu bym zrezygnowal i do wyswietlenia zrobil widok tak jak to pisal @Seth

Cytat
numer_int - czesc liczbowa, kolejny numer dodaje funkcja max(numer_int)+1

Troszeczke nieefektywne, poczytaj o szybkosci funkcji agregujacych. Wydajniej jest odwolac sie do sekwencji, lub niewstawiac tego pola i wykorzystac wyzwalacz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.