[ Alexandar_d @ 16.08.2006. 20:45 ] @
Interesuje me koji je upit da mi automatski poveca vrijednost za 1 u nekoj bazi na nekom polju? Znaci da je ne moram prvo citat vrijednost iz polja, pa da ga rucno inkrementujem pa ga onda opet snimam u polje kao novu vrijednost, mozel nekako da se nekim upitom odmah vrijednost (int) poveca za 1?
[ kelja @ 16.08.2006. 21:00 ] @
'UPDATE tabela SET brojac=brojac+1';
[ Milos Milosevic @ 24.09.2006. 12:19 ] @
Imam slicno pitanje pa cu ga postaviti u ovoj temi, nadam se da se pokretac teme nece ljutiti:
(napominjem svoje oskudno iskustvo sa bazama podataka)

SQL Server, svojstvo Identity:

"IDENTITY NE GARANTUJE DA CE REDOVI BITI JEDINSTVENI. Da bi se garantovala jedinstvenost redova,
mora se formirati JEDINSTVENI INDEKS nad kolonom identiteta."
(iz knjige 'Vodic kroz SQL Server7')

Sa druge strane:

Indeks ne treba kreirati na PK. cak se u literaturi moze naci savet da indekse treba
izbegavati osim ako zaista nisu neophodni.

Pitanje je:

Kako se ''skolski'' kreira auto-inkrementalni PrimaryKey?
[ aleksandarpopov @ 24.09.2006. 13:03 ] @
Imas vise opcija npr. ovako www.elitesecurity.org/t183811-0#1214583
Za jednostavnije projekte(tabele) je i identity dovoljno dobar.

Citat:

Indeks ne treba kreirati na PK. cak se u literaturi moze naci savet da indekse treba
izbegavati osim ako zaista nisu neophodni.


?!?!?? Ovo zaboravi. Na PK obavezno, na Fk takodje i na polja koja se cesto pretrazuju bi trebalo staviti indexe.
Dobro mozda index nema efekta na tabeli od samo 400-500 slogova.
Pozdrav
[ Milos Milosevic @ 24.09.2006. 13:47 ] @
Nisam se dobro izrazio,
Jedinstveni Indeks, ne Index (mislim na ogranicenje UNIQUE koje
-eksplicitno- Nije primenljivo na PK).

ogranicenje PK samo po sebi stvara Jedinstveni Indeks.
Stoga je dovoljno kombinovati ogranicenje PK i Identuty?


Sta je bolje od Identity/autoincrement (na temi na koju si ukazao:
"...Ovo je bolje rjesenje nego koristenje polja tipa autoincrement")?



[Ovu poruku je menjao diplIng dana 24.09.2006. u 15:55 GMT+1]
[ axx420 @ 24.09.2006. 14:58 ] @
Evo primer:
Code:
CREATE TABLE MojaTabela
  (MojPK int NOT NULL IDENTITY (1,1) primary key clustered)

Jeste, PK je sam po sebi Jedinstveni Indeks pa mu oznaka UNIQUE nije ni potrebna.

Mada se SQL server neće buniti ako dodaš:
Code:
create unique index MojIndeks on MojaTabela (MojPK)

Što bi bilo uzaludno trošenje resursa pošto nije uopšte potreban pored PK.
[ aleksandarpopov @ 24.09.2006. 15:45 ] @

pstojanovic je napisao:
Citat:

Kao što reče WhoIs, jedan od načina je SQL upit koji traži prvi sledeći slobodni broj. Ini datoteka je ok, ako je stavljena na mrežu pa joj imaju svi korisnici pristup. Ako je definisana za lokalnog korisnika, imaš konflikt. Slično, nije loše ni da se napravi tabela koja definiše tipove dokumenata + brojače za svaki tip, tako da se prilikom _upisa_ novog dokumenta povećava brojač po tipu. Pri tome treba imati u vidu da korisniku ne treba biti garantovan novi broj dokumenta sve do trenutka upisa u bazu, da se ne bi stvarale nepotrebna preskakanja.


Ovakvi brojaci se najcesce koriste za generisanje id dokumenta, ali moze za bilo sta da posluzi.
[ Milos Milosevic @ 24.09.2006. 17:09 ] @
Ako se koristi posebna tabela za kljuceve, gde je preporucljivo smestiti logiku (increment, 'UPDATE...'),
verovatno u bazi (Funkcija baze/trigger)?

[ aleksandarpopov @ 24.09.2006. 18:45 ] @
Ja koristim triger. U projektima gde se koristi n-slojna aplikacija, objektni model....tada bi i tu logiku trebalo smestiti u bussines klasu na aplikativnom serveru, ne u bazu podataka. Pozdrav
[ Miloš Baić @ 24.09.2006. 21:11 ] @
Code:

CREATE TABLE MojaTabela
  (MojPK int NOT NULL IDENTITY (1,1) primary key clustered)

Izvinjavam se što se ubacujem u temu, ali meni ovo neće da prođe na PostgreSQL 8.1!!!
Odnosno, kako je ispravno to ispisati u PostgreSQL 8.1? Na SQL Serveru 2000 sam probao
i naravno funkcioniše i iz Query Analizer-a, a i ako tabelu pravim pomoću wizard-a.

Hvala unapred.
[ aleksandarpopov @ 25.09.2006. 09:18 ] @
Sintakasa jednog SUBP verovatno nece raditi na drugom SUBP. Identity je specifican za MSSQL. Imas u pg-u serial.
Citirano iz Postgressql helpa:
Citat:

8.1.4. Serial Types
The data types serial and bigserial are not true types, but merely a notational convenience for setting up unique identifier columns (similar to the AUTO_INCREMENT property supported by some other databases). In the current implementation, specifying

CREATE TABLE tablename (
colname SERIAL
);
is equivalent to specifying:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL
);


Pozdrav
[ chachka @ 25.09.2006. 09:25 ] @
PostgreSQL nema IDENTITY niti CLUSTERED.

Nesto slicno se postize sa
Code:

CREATE SEQUENCE s_mojatabela_mojpk
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;

CREATE TABLE mojatabela (
  MojPK INT8 NOT NULL DEFAULT nextval('s_mojatabela_mojpk')
);
[ Miloš Baić @ 25.09.2006. 10:58 ] @
Što se tiče mog pitanja, zahvaljujem se na odgovoru...
Pozdrav.