[ S A J A @ 21.12.2016. 19:24 ] @
Ovo je možda više pitanje za baze ali pošto korstim PHP neka bude ovde.

Dakle, prilikom snimanja neke forme na client strani, dobijem JSON sa podacima koje treba snimiti u bazu. Međutim, ta forma ne sadrži samo vrednosti koje se upisuju u jedan red u bazi nego sadrži neke stavke. Na primer, imamo fakturu koja će imati nepoznat broj artikala i usluga na sebi. Kad stignu sve te stavke posle snimanja, ako je prvi upis onda se očigledno sve INSERT-uje u bazu i to je jasno. Međutim, koji je najbolji način hendlanja izmena:

1. Kad stigne JSON sa podacima, ići stavku po stavku i upoređivati sa bazom pa ono što postoji da se radi UPDATE, ono što ne postoji da se uradi INSERT a zatim videti u bazi šta je višak pa to DELETE.
2. Prosto i seljački: kod upisa obrisati sve prethodne stavke iz baze i INSERT-ovati sve nove.

Koji sistem se generalno koristi?

[ jablan @ 21.12.2016. 22:52 ] @
Ako nemaš neke spoljne ključeve ka drugim tabelama ili druga ograničenja koja nisi ovde naveo, onda definitivno 2, u transakciji.
[ K.F. Gaus @ 31.01.2017. 13:14 ] @
Oba pristupa koja si naveo se koriste, na tebi je da proceniš na osnovu toga kakva ti je baza koji će ti više odgovarati.

Ne znam da li je dozvoljeno postavljanje linkova do drugih sajtova
http://stackoverflow.com/quest...lways-faster-than-deleteinsert
[ Dr.sima @ 01.02.2017. 13:59 ] @
Ja ne podrzavam delete, bar ne bez zurnal tablele.
Napravi jos jednu kolonu STATUS kojoj mozes vrednost da menjas u zavisnosti od potrebe (VALID/INVALID).


[ djoka_l @ 01.02.2017. 14:16 ] @
Potpuno se slažem sa onim što je napisao Dr.sima - ne samo da je DELETE nad takvim podacima upitan, čak se treba uzdržavati i sa UPDATE komandom.

U tvom primeru, ako je u pitanju faktura sa stavkama, pitanje je šta se JOŠ desilo osim što je upisan slog (slogovi) u jednoj ili dve tabele. Recimo, odštampana je fakutura koja je završila u nekom DMS-u. Poslata je faktura kupcu. Promenjeno je stanje u skladištu. Urađeno je knjiženje po fakturi itd.

Bez obzira da li se sve gornje zaista i desilo, pitanje je za šta ti trebaju podaci o kojima je reč, pa prema tome treba doneti i odluku.

Jedan pristup, na primer ako podatak treba da završi u nekom DWH sistemu je da se doda polje GENERATION ili VERSION. Ovo je, po meni, bolje rešenje nego imati statusno polje valid/invalid. Na ovakav način imaš istoriju promena, pa možeš iz istorije da rekonstruišeš željeno krajnje stanje. U DWH se takvi podaci NIKADA ne brišu, ali ako je tebi potrebno da imaš takve podatke u transakcionoj bazi, na ovaj način možeš da uradiš čišćenje podataka i da u transakcionoj bazi ostaviš samo poslednju generaciju ili verziju podataka.

Drugi pristup je da u JSON poruku dodaš neke meta podatke. Tipa, ako je dodatata stavka, staviti neki status new=true. Ako je stavka obrisana dodati deleted=true, ako je promenjena, staviti old i new vrednosti za svako polje i oznaku da je stavka apdejtovana.