[ lenny @ 16.09.2003. 12:02 ] @
Struktura baze je sledeca:
1. Grupa proizvoda - jedini atribut je ime_grupe
2. Kategorija proizvoda - jedini atribut je ime_kategorije, i ima spoljni kljuc grupe, jer je u principu podgrupa
3. Proizvod - atributi: ime, referenca_na_kategoriju, itd.

Znaci moze biti vise grupa, u jednoj grupi moze biti vise kategorija, a u svakoj kategoriji moze biti vise proivoda.

U tabeli proizvod ce biti oko 300 vrsta, u kategoriji 25, a u grupi 10.

Godisnje se proda oko 2 miliona proizvoda, i moraju se generisati razni izvestaji po grupama, kategorijama, proizvodima, itd.

Ciljna platforma je: Windows NT + MS SQL 7

Pitanja su sledeca:
1. da li praviti posebne tabele kategorija i grupa, ili ih staviti kao obican string field u proizvod (jer nemaju druge atribute sem imena). Ovde bih ja naravno napravio posebne tabele, ali mozda neko ima drugo misljenje? Sa posebnim tabelama su upiti duzi (i mora se raditi join), ali da li su i sporiji? Ako jesu koliko?
2. ako koristim tabele kategorija i grupa, da li da im bude kljuc ime (tj. string), ili da im se pravi autoincrement int kljuc (pored unique polja ime)? Sta je brze, sta pravilnije? Sta ce raditi brze na MS SQL 7? Ovo je vazno, jer narucilac hoce string id-ove, a po meni to nije dobro resenje.
3. Da li se moze naci neki dobar rad na temu "string ID protiv numerickog ID-a" na net-u?
[ broker @ 16.09.2003. 13:10 ] @
1. uvek odvoj sifarnike u posebne tabele. na priv pogled se cini koplikovano praviti upite ali se tako najbolje optimizuje baza sto ce reci najbrze se dolazi do rezultata.

2. ja koristim string za id polja osim u slucaju da je to polje autoincrement kad mora da bude numericko. kada je id string onda dobijas mogucnost da ima opisnu ulogu, sto je vrlo zgodno kod nekih manjih sifarnika gde cesto sam ID moze biti dovoljan da se zna o cemu se radi a kod velikih, jer se moze organizovati hijerarhijski sifarnik.

U tvom slucaju mozda je dobro da razmislis da koristis jedan sifarnik ali koji ce biti hijerarhijski, tako da npr prvi znak ili dva znaka oznacavaju grupu a ostali znakovi kategoriju. Tako za svaki slog grupu dobijas tako sto izdvojis deo sifre koji oznacava grupu. Ovo ipak nije bas po pravilima modeliranja.


Najpravilnije bi bilo tako kako si i zamislio.:

=PROIZVODI=
ID_PROIZVODA
ID_KATEGORIJE
OPIS
.
.
.

=KATEGORIJE=
ID_KATEGORIJE
ID_GRUPE
OPIS

=GRUPE=
ID_GRUPE
OPIS

[ vbraca @ 17.09.2003. 05:53 ] @
Procitaj iz bilo koje knjige koja se bavi bazama podataka makar prva tri pravila normalizacije i onda odluci sta i kako.

Moja preporuka je da uvek koristis sifarnike/medjutabele u ovakvim slucajevima i da uvek koristis brojeve kao primarni kljuc (jednostavno sa brojevima se teze gresi).

U praksi, bar kod mene, pokazalo se da je mnogo lakse kasnije na zahtev korisnika generisati GROUP BY izvestaj ako ne moras da vodis racuna i o ispravnosti unetih stringova.

Pozdrav,
[ degojs @ 17.09.2003. 06:15 ] @
Ma naravno da je u većini slučajeva bolje imati brojeve za primarne ključeve. Brojevi se ne ponavljaju :) a za imena proizvoda i slično, ne može se biti siguran. Naravno, sve ovo u pravilu.

Citat:
jer narucilac hoce string id-ove, a po meni to nije dobro resenje.


E ako oni baš hoće tako, onda..

Pozdrav :)
[ lenny @ 17.09.2003. 09:05 ] @
Hvala na odgovorima.

Citat:
vbraca:
Procitaj iz bilo koje knjige koja se bavi bazama podataka makar prva tri pravila normalizacije i onda odluci sta i kako.


Ono što me je najviše interesovalo jeste: Da li je bolje koristiti (dodatne) numeričke id-ove za one tabele koje sadrže jedinstvene opise (tj. imena) tipa string? I zašto? I da li je neko našao neki dobar rad, koji lepo iznosi za i protiv za oba rešenja?