- Ako drugacije nije postavljeno, elementarni iskazi tipa "INSERT...." jesu transakcije, u smislu da ce, ako insert iz nekog razloga pukne biti uradjen rollback, zapravo si dobro shvatila. Cilj transakcije je da napravi grupu izjava koje, delimicno izvrsene nemaju smisla, tj. napravice stanje koje logicki nije ispravno, tako da developer moze da garantuje da ce one biti izvrsene u paketu, tipa "Sve ili Nista".
Dodatne prednosti mogu da budu vezane za optimizacije storage engine-a, tj. internog rada baze. Ako pustis par stotina UPDATE statementa kao transakciju mozes usput reci bazi (ili moze ona sama, mozda, ako je dovojlno pametna) da ne radi update index-a posle svakog UPDATE-a, vec samo jednom, kad se transakcija zavrsi. Ako update-ujes par hiljada slogova u tabeli od par miliona i gde svaki update traje zbog regenerisanja index-a, dobices znacajno ubrzanje operativnog rada.
- Primary key mora da bude non-null i unique. Ako ti tvoj index sasvim sigurno to obezbedjuje logicki je sasvim ispravno da ga stavis kao primarni kljuc. S'druge strane, nije besmisleno uvesti unikatan dodatni slog, neki "ID", tipa integer, autoincrement koji ce da bude primarni kljuc, stavise dobra ti je logika.
Prednost je sto npr. bas mysql koristi primarni kljuc za replikaciju, tako da mu bas prija da bude integer. S'druge strane, ako tvoj index (sifra proizvoda, sta god), nekad bude morala da iz netehnickih razloga bude varchar (videces vremenom, imaces glupe zahteve), taj ALTER ce ti posle napraviti veliki problem.
Takodje, svi indexi koje mysql pravi (dodatni indexi), kao prvo polje imaju primarni kljuc - ako ga ti ne stavis, on ga nalepi implicitno, jer mu treba. Samim tim, ziva je zgoda da to bude prosto integer a ne neko duze polje. Iz tog, i nekih drugih razloga, sve InnoDB tabele MORAJU da imaju primarni kljuc, vodi racuna o tome. Ako ga nemaju, opet, mysql ce ga napraviti implicitno. Ako ne moze da ga identifikuje (nema odgovarajuceg polja), napravice kompozitni, nekad od SVIH polja zajedno - i onda em to update-ovati svaki put, em to lepiti na sve ostale indexe. Sustina je: Uvek imaj primarni kljuc, kao ID, integer.
Konacno, cisto napomena: Ako stavis primarni kljuc neki ID, koji je autoincrement, baza ce ti garantovati da se inkrement svaki put inkrementira. Nece ti garantovati da je taj inkrement tacno 1 niti za koliko raste - samo da raste. Postoje razlozi vezani za replikaciju kad je meni ovo bas trebalo, tako da vodi racuna kako razmisljas i sta ti jeste a sta nije garantovano. :D
Kad lepo pitas i pokazes ama bas malo truda, odma vecini nije tesko da se potrudi i objasni ti sve sto moze. :D
Please do not feed the Trolls!
Blasphemy? How can I blaspheme? I'm a god!'