[ CoyoteKG @ 13.04.2010. 11:16 ] @
Poceo sam da ucim SQL Server 2005 i za sada mi je sve jasno osim jedne stvari za koju pretpostavljam da je jako bitna. Naime, u knjizi nije bas opisan i dat primer. Receno je samo da je Index u najvecem broju slucajeva Primary key. Mene interesuje, ako neko moze da mi opise, u kojim slucajevima je bolje da Index ne bude primary key. Pise mi da dodeljivanje Indexa ubrzava pretragu, da Index moze biti vise kolona, i da za razliku od primary key ne mora da bude uvek jedinstven. Mozda sam pozurio malo sa pitanjem, mozda ce tamo na sredini knjige to biti objasnjeno, al eto, mozda neko ovde moze u par recenica da mi pojasni to.



Takodje me interesuje sledeca stvar.

Kad sam napravio tabelu, definisao sam da se kolona CustomerID koja je primarni kljuc i int sama popunjava. Odnosno Stavio sam (Is Identity) = Yes; Identity Increment = Yes, Identity Seed = Yes. Pa sam dodelio neka pravila da mi se pojedina polja ne mogu popuniti ukoliko ne ispunjavaju neke odredjene uslove. I kad namerno pogresim dobijem poruku da to polje me moze biti recimo "manje od 0", pa kad posle toga unesem normalno, dobijem nov ispravan red u tabeli samo sto mi kolona CustomerID nije popunjena redom. 1,2,3,4,5,6,7,8... nego ti redovi kod kojih sam "pogresio" prilikom unosa je preskocen, tako da mi kolona CustomerID izgleda 1,2,5,7,9,10... Zasto se to desava, i ako SQL to namerno radi tako, zbog cega je to pretpostavljam dobro?
[ Fedya @ 13.04.2010. 11:47 ] @
Sto se indexa tice, to je kompleksna tema, i ako tvoja knjiga iole valja imaces poglavlje (ili vise) samo o njima. Poenta je bas to sto si naglasio da index ubrzava pretragu da odredjenim poljima. Npr ako cesto trazis nesto po imenu napravis index po tome i pretraga ce biti znatno brza (kako to funkcionise potrazi b-stabla na netu npr http://en.wikipedia.org/wiki/B-tree ).
Index naravno ne mora da biti jedinstven ali nema puno smisla stavljati ga podatke koji se jako cesto ponavljaju (na primer index na polje rod nema puno smisla posebno ako imas priblizno isti broj muskaraca i zena u tabeli).

Kljuc je nesto sasvim drugo, ali ljudi brkaju posto je primarni kljuc obicno i cluster index.

Sto se drugog pitanja tice, kada obrises neki red iz baze njegov ID ostaje neiskoristen. Cak i u slucaju kada taj zapis nije realno ni dospeo u tabelu (npr rollback transakcije). U svakom slucaju, Identity polje ne bi trebalo koristiti na mestima gde je redosled vrednosti bitan.
Identity se obicno koristi samo za povezivanje tabela, i mozda ga ni ne bi trebalo prikazivati krajnjem korisniku. Ako ti treba system gde je redosled bitan (npr. broj fakture) moras sam pisati funkciju za njegovo generisanje i upisivati ga u neko drugo polje.
[ CoyoteKG @ 13.04.2010. 20:52 ] @
hvala :)