![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Tworze pewna baze danych z tabela przechowujaca uzytkownikow oraz uslugi, ktore ci uzytkownicy beda posiadac. Problem jest w tym, ze tych uslug bedzie wiele, tysiace dla kazdego uzytkownika, ktory bedzie je sobie mogl dodawac i usuwac. Chce, aby uzytkownikowi numeracja uslug leciala od poczatku np. usluga#1, usluga#2 a nie jak w przypadku nextval() usluga#2831381. Napisalem prosta funkcje w plpgsql:
i teoretycznie dziala, jednak przy dodawaniu rekordu musze wklepywac:
rozumiem, ze nie da sie zrobic czegos w stylu:
![]() Oprocz tego funkcja ta nie dziala dokladnie tak samo jak nextval gdyz podaje wartosc ostatniego id powiekszona o jeden, nie uwzgledniajac czy uzytkownik mial juz jakies uslugi i je wykasowal (po zwolnieniu sie identyfikatorow nie powinny one byc brane pod uwage). Czy ktos ma jakies lepsze rozwiazanie tego problemu? Pozdrawiam |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Oprocz tego funkcja ta nie dziala dokladnie tak samo jak nextval gdyz podaje wartosc ostatniego id powiekszona o jeden, nie uwzgledniajac czy uzytkownik mial juz jakies uslugi i je wykasowal (po zwolnieniu sie identyfikatorow nie powinny one byc brane pod uwage). Przecież praca na sekwencjach też nie uwzględnia usuwania rekordów więc nie wiem o czym teraz piszesz. Ogólnie jak się upierasz przy tym numerowaniu (bo moim zdaniem nie ma sensu bawić się czy to będzie usługa#2098 czy usługa#190, no chyba że tak masz w specyfikacji), to masz prostą sytuacje, dla każdego użytkownika musisz mieć osobną sekwencję. I ja widzę teraz dwa rozwiązania, albo tworzysz dla każdego użytkownika sekwencję postgresową, albo tworzysz swój mechanizm sekwencji, czyli np. tabela z kolumnami user_id|seq i w seq przechowujesz niewykorzystany identyfikator. (oczywiście najlepiej obsługę tego zamknąć w funkcje) -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Przecież praca na sekwencjach też nie uwzględnia usuwania rekordów więc nie wiem o czym teraz piszesz. Uwzglednia usuwanie rekordow, bo jak dodasz 3 wpisy do tabeli i je usuniesz to nextval dla sekwencji zwroci Ci i tak 4, a w opisanej sytuacji jezeli bede mial uzytkownika, 1, 2, 3, 4 i usune 4, to funkcja mi zwroci 4, a wiec wczesniej wykorzystane id znowu bedzie uzyte. Ten post edytował Helios 18.10.2008, 19:56:57 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A jak będą wykorzystane 1, 2, 3, 4 i usunie 3? Robisz coś bez sensu, w ogóle jeśli masz jakieś usługi to powinny mieć stały numer i jedynie oznaczać niektóre jako usunięte.
Wydaje mi się że robisz podstawowy błąd, czyli masz błędne założenia jak coś ma funkcjonować. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.06.2025 - 23:39 |