Na początku bardzo dziękuję wszystkim za udział w dyskusji
Fac napisał(a):
Dodaj sobie w klasie (tablicy, liście, kolekcji, jsonie, xmlu, czy co tam masz pod maską) przechowującej daną pozycję właściwość przechowującą status (puste/I/U/D), (...)
Tak, do tego też wniosku doszliśmy w poprzednich wypowiedziach :). Ale dzięki za potwierdzenie.
cerrato napisał(a):
SQL-em raczej nie chcę sprawdzać co się zmieniło, więc muszę przerzucić to na aplikację (jakiś status każdej pozycji co z nią zrobić Add/Update/Delete/None)
Pytanie - wcześniej pisałeś, że to apka webowa, jakieś API/dżejson. Czy masz możliwość grzebania w endpointach/zmiany czegoś na serwerze, czy jedynie możemy działać w oparciu o front?
Wszystko piszę sam (front i backend, więc mam dowolność
Marcin.Miga napisał(a):
Sprawdzanie przez alikację będzie na pewno dużo wolniejsze, niż po stronie bazy danych. Musisz pobrać stare dane, sprawdzić z nowymi, nadać statusy itd.
Odpisałem ci w komentarzu, jak to szybko, łatwo i przyjemnie zrobić w PostgreSQl, bo ma do tego odpowiednie mechanizmy...
Szybki UPDATE w postgreSQL....
Dzięki wielkie! Później na spokojnie sobie to przeanalizuję, bo to taki bardziej zaawansowany SQL jak dla mnie ;) Na prostym przykładzie wygląda ok, ale zakładając, że tabele mogą mieć ponad 100 kolumn i wiele powiązań to wolałbym stosować rozwiązania, które w pełni rozumiem :)
Pytanie również w jakim kontekście szybsze? Chodzi Ci o czas napisania kodu czy samo jego wykonanie?
Pytam, bo jednak mam wrażenie, że statusy będą jednak nieco wygodniejsze (?) - a przynajmniej lepiej rozumiem tą koncepcję :)
No i pytanie czy Twoje rozwiązanie zakłada również DELETE oraz INSERT na powiązanej tabeli? Bo sam UPDATE to zakładając, że liczba pozycji nie ulegnie zmianie jest stosunkowo prosty.
Ale tak jak napisałem wcześniej - później o tym jeszcze poczytam.
Panczo napisał(a):
Mam pytanie do tych którzy chcą tworzyć znaczniki na pozycjach i wykonowyać delete/update/insert dla poszczególnych pozycjach. Dlaczego?
Czysto pragmatycznie, na wejściu dostaje dane które musze umieścić w tabeli 1:1 lub zastąpić, jaki jest cel w pisaniu mechanizmów: od frontu zaznaczanie zmiany usunięcia dodania i obsługiwanie tego na backendzie? Kiedy prosty delete i insert załatwia sprawę. Droga inna a cel identyczny.
Wybacz, ale nie jestem pewny co sugerujesz. Czy piszesz o tym, ze delete pozycji faktury ma się wykonać w momencie, gdy user naciśnie "usuń pozycję"? Jeśli tak to to nie wchodzi w grę, bo user może wejść do faktury -> usunąć wszystkie pozycje a później stwierdzić, że się pomylił i chce zamknąć dokument bez jego zapisywania (bez utrwalania zmian). W jaki sposób miałbym przywrócić to co on usunął w trakcie modyfikacji? Są sytuacje, gdzie operacja na bazie powinna być wykonywana od razu (np. próba usunięcia całej faktury), ale są takie, gdzie trzeba czekać na zatwierdzenie usera.
Miang napisał(a):
@Kofcio podstawowe pytanie - robisz projekt dla siebie , na zaliczenie do szkoły, czy może masz kawałek czegoś do zrobienia w ramach projektu w firmie w której pracujesz?
jak to ostatnie to nie kombinuj sam tylko zadaj na piśmie właściwe pytania przełożonym i uzyskaj odpowiedź też na piśmie bo inaczej to będziesz bohaterem następnego nagrania na jutubie jak to słynne z MF, a nasze forum będzie tam przedstawione jako zły duch programisty dający złe porady;)
Projekt robię w całości dla siebie i pod siebie i dla zabawy :), ale chcę to zrobić dobrze. Jak coś z tego wyjdzie to zobaczymy, ale na razie o tym nie myślę. Z zawodu jestem księgowym dlatego dość dobrze wiem jak to ma działać (z biznesowego punktu widzenia), ale inne rzeczy np. takie techniczne muszę sobie poukładać w głowie ;)
Mr.YaHooo napisał(a):
Sam osobiście wolałbym, mieć kilka metod API jak
AddInvoiceItem
,UpdateInvoiceItem
orazDeleteInvoiceItem
niż jedną wielkąUpdateInvoiceWithItems
Zaś same zmiany zapisywałbym bezpośrednio po zmianie wykonanej przez użytkownika, a nie całość na raz.
To oczywiście kwestia podejścia, czasami lepiej zapisywać zmiany od razu do bazy danych, ale czasami lepszym rozwiązaniem będzie poczekać na zatwierdzenie usera - po niektórych zmian nie można w prosty sposób cofnąć. Ja wychodzę z założenia, że dodanie i usunięcie całego dokumentu powinno być wykonywane ASAP ale UPDATE powinien być wykonanym w momencie zatwierdzenia usera.