DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   baza za online prodavnicu (http://www.devprotalk.com/showthread.php?t=10339)

slavkan 02. 09. 2011. 14:41

baza za online prodavnicu
 
Pozdrav svima. Pravim neku bazu za online prodavnicu racunara i treba mi savet oko organizacije iste. Evo o cemu se radi:

Treba pamtiti podatke komponentama i konfiguracijama komponenti koje prodavnica ima. Naravno administrator aplikacije mora da ima opciju da sve to menja (dodaje nove komponente i konfiguracije, brise, menja brojno stanje komponenti - standardica). Treba omoguciti i online narudzbu, tj da korisnik moze sam da napravi sebi konfiguraciju izborom komponenti. To je uglavnom najbitniji deo baze, ne racunajuci registraciju korisnika, definisanje administratora, ovlascenja sta ko moze da vidi itd. E sad, interesuje me ovaj dio oko komponenti, konfiguracija i narudzbi. Da li je zgodnije da sve komponente smestam u jednu tabelu ili da ih razvrstavam (npr posebno ploce, posebno procesore itd) ali u tom slucaju dobijam vise tabela. Ako bi ih stavio u jednu tabelu onda bi mogao da dodam jos jedno polje gde bi mogao da indetifikujem nekim parametrom da li su to ploce da li su procesori... zanima me sta je zgodnije i sta ce praviti manje problema u daljem radu. Nema potrebe da jos detaljisem, mislim da je svima jasno o cemu se radi. Hvala unapred svima !

misk0 02. 09. 2011. 14:51

1. Zasto izmisljas toplu vodu? Ukoliko pravis nesto konkretno, najbojlej e koristiti gotova rjesenja (e-commerce), ako hoces uciti - onda je razlog opravdan.

2. Zamisli da imas 100.000 razlicitih kategorija proizvoda (sto nije nemoguce u nekoj obicnoj prodavnici) .. koliko ces tabela u tom slucaju imati? Kakva ces im imena davati? Kako ces ih naci?... Jednom rijecju - ne radi se to tako.
Znam da tebe buni to sto razlicite kategorije proizvoda imaju razlicite karakteristike, ali to se rjesava promjenjivim (opcionim) atributima koji su vezani za odradjene grupe / vrste proizvoda.

slavkan 02. 09. 2011. 15:09

Pa ucim, nista gotova resenja.
Pa kakve veze ima sto imam 100000 artikala ako imam, sto ti kazes, mogucnot da izvrsim kategorizaciju proizvoda (tastature, misevi, hdd, monitori).
Koliko shvatam, ti predlazes da sve komponente budu u jednoj tabeli koja ce imati jedno polje "kategorije" pa ako se javi da imam 100 razlicitih monitora oni ce biti u tabeli pod kategorijom "monitori" i time sam na dalje resio problem sa manipulacijom (brisanje, promenu brojnog stanja u magacinu, ponudu korisniku da izabere odredjenu komponentu iz odredjene kategorije itd) ?!?

ivanhoe 02. 09. 2011. 15:57

imas tabele proizvodi, kategorije i veznu tabelu proiz_kateg koja ima samo polja proizvod_id i kategorija_id (posto je obicno pretpostavka da jedan proizvod moze da bude u vise kategorija, ako to nije potrebno onda mozes i bez ove tabele). Kategrije imaju polje parent_id, preko koga moze da se pravi hijerarhija tipa maticne_ploce -> intel -> i7 (a istovremeno ti ta ploca spada u recimo kategoriju Asus)

To je jednostavan deo, ono sto je komplikovanije su atributi za proizvode, posto nemaju iste osobine maticna ploca i tastatura, znaci treba da imas polja koja su pretraziva, a razlikuju se za svaku kategoriju proizvoda. Zato su za takve stvari bolje no-sql baze, recimo MongoDB je fenomenalan za takve poslove

webarto 02. 09. 2011. 16:36

http://en.wikipedia.org/wiki/Many-to...8data_model%29


slavkan 02. 09. 2011. 17:53

Citat:

Originalno napisao webarto (Napišite 101315)

razumem, pokusacu nesto da sklepam pa se javljam !

dacha 03. 09. 2011. 00:27

Ono što tebe zanima je verovatno EAV model (Entity-attribute-value model), pa potraži na Googlu. EAV ti daje fleksibilnost u opisu proizvoda različitim atributima, ali ima svoju cenu u pogledu brzine. Ako želiš prodavnicu opšte namene onda možda treba razmišljati o ovakvom rešenju, u suprotnom potraži način da izbegneš ovaj model.

slavkan 03. 09. 2011. 14:45

Evo, od prilike koliko sam shvatio za ovaj deo oko proizvoda, kategorija i narudzbe bi trebao da izgleda ovako. Samo jos nesto da razjasnimo, pod kategorijama se, u ovom slucaju,valjda podrazumevaju monitori,tastature,memorije itd, ako je to tako onda bi relacioni model licio na nesto ovako:

Kôd:

Proizvodi (idProizvoda, nazivProizvoda)
Kategorije (idKategorije, nazivKategorije)
Proizvodi_Kategorije (idProizvoda,idKategorije)
Narudzba (idNarudzbe,idProizvoda,idKategorije)

Imam jos jedno pitanje, ako bi se podrazumevalo da pod kategorijama podrazumevam tastature,monitore.memorije ... da li bi se mogla izbeci ova tabela Proizvodi_Kategorije ako vazi da jedna kategorija moze da ima vise proizvoda ali jedan proizvod moze da ima samo jednu svoju kategoriju (npr ne moze proizvod tastatura da pripada kategorijama tastatura i memorije ):

Kôd:

Proizvodi (idProizvoda, nazivProizvoda, idKategorije)
Kategorije (idKategorije, nazivKategorije)
Narudzba (idNarudzbe,idProizvoda,idKategorije)


jablan 03. 09. 2011. 16:29

Da, to ti je već napisao ivanhoe:

Citat:

Originalno napisao ivanhoe (Napišite 101314)
posto je obicno pretpostavka da jedan proizvod moze da bude u vise kategorija, ako to nije potrebno onda mozes i bez ove tabele

BTW, šta će ti kategorija u narudžbenici?

Što se tiče karakteristika proizvoda koji zavise od kategorije, pogledaj ovo što je preporučio dacha:

Citat:

Originalno napisao dacha (Napišite 101328)
Ono što tebe zanima je verovatno EAV model (Entity-attribute-value model), pa potraži na Googlu.


slavkan 03. 09. 2011. 16:51

Hhehe, u pravu si za narudzbenicu :) ne treba kateogrija :)

Zaboravio sam da ce mi trebati jos jedna tabela a to je konfiguracije koje ce se ticati samo administratora u fazonu kao da administrator moze da pravi konfiguracije i da ih predlaze kupcima. Da li je dovoljno samo samo da ta tabela konfiguracije kao spoljni kljuc ima idProizvoda iz tabele Proizvodi ili kako vec ?

slavkan 05. 09. 2011. 00:15

Nesto mi je zamrla tema :D

Evo nadam se da sam sad OK organizovao bazu:

Kôd:

Proizvodi (idProizvoda, nazivProizvoda)
Kategorije (idKategorije, nazivKategorije)
Proizvodi_Kategorije (idProizvoda,idKategorije)
Narudzba (idNarudzbe,idProizvoda)
Konfiguracije (idKonfiguracije, idProizvoda)


Ono sto sam i ocekivao jesu problemi kada budem pravio upite pa sad jos jednom pitam da li je to sve sto mi je potrebno da mogu da vrsim dodavanja, brisanje i izmjenu proizvoda, kategorija i konfiguracija kao i pravljenje narudzbi na osnovu proizvoda. Napominjem jos jednom da pod kategorijama cu da podrazumevam Procesore,Monitore itd.

noviKorisnik 05. 09. 2011. 00:33

Nekako mi se čini da ti ove tabele za Narudžbe i Konfiguracije ne stoje baš. Na primeru konfiguracije imaćeš bar jednu njenu karakteristiku, ako ne drugo onda naziv, uz koji ti ide idKonfiguracije, dok tabela koju si predstavio bi valjalo da nosi ime Konfiguracije_Proizvodi (više prema više opet...

slavkan 05. 09. 2011. 00:54

Nisam shvatio to za narudzbe bas najbolje :(

A ovo za Konfiguracije_Proizvodi (vise prema vise) - kako jedan proizvod moze da bude svrstan u vise kategorija (Znaci tastatura da pripada i tastaturama i misevima) ?!?

noviKorisnik 05. 09. 2011. 02:22

Sorry, ne vidim pomena kategorije u prethodnoj poruci.

(više prema više) Primer tastature i konfiguracija - ista tastatura može da bude u 'osnovnoj' i 'srednjoj' konfiguraciji.

slavkan 05. 09. 2011. 13:06

Kakva sad srednja i osnovna konfiguracija, mislim da ti nisi citao od pocetka ovu temu !

japan 05. 09. 2011. 13:28

Pa samo malo razmisli. ovako kako si ti uradio, mozes da pravis samo konfiguracije od jedne komponente. Treba da imas dve tabele:

Kôd:

Konfiguracije(idKonfiguracije, nazivKonfiguracije)
Konfiguracije_Komponente(idKonfiguracije, idKomponente)

Isto vazi i za narudzbine

slavkan 05. 09. 2011. 14:24

Ahaaaa pa nisam mogao da razumem sugestiju, zbunio me sa ovim srednja i osnovna


Da li si na ovo mislio i da li je konacno to to sto meni treba za dodavanje, izmenu i brisanje kategorija, komponenti, konfiguracija kao i pravljenje narudzbi?

Kôd:

Proizvodi (idProizvoda, nazivProizvoda)
Kategorije (idKategorije, nazivKategorije)
Proizvodi_Kategorije (idProizvoda,idKategorije)
Narudzba (idNarudzbe,nazivNarudzbe)
Narudzba_Proizvodi (idNarudzbe,idProizvoda)
Konfiguracije(idKonfiguracije, nazivKonfiguracije)
Konfiguracije_Proizvodi(idKonfiguracije, idProizvoda)


japan 05. 09. 2011. 14:47

Da, to bi bio neki školski primer kako se to radi. Najbolje da u glavi prođeš proces pravljenja i brisanja konfiguracija i narudžbi, ili još bolje da napišeš SQL upite za to, svakako će ti trebati ako imaš nameru da praviš shop.

slavkan 05. 09. 2011. 14:58

OK, HVALA.

Sad cu malo da se pozabavim malo kreiranjem ove baze. Posto smo ovde koliko toliko postovali normalizaciju podataka kod pravljenja sql upita dosta ce se koristiti JOIN operator ako se ne varam pa cu malo da se pozabavim i time i onda se javljam sa novim problemima :D

noviKorisnik 05. 09. 2011. 14:59

E, dobro je što ste se javili, jer me je razdrmala ova primedba za 'osnovna i srednja', bah...

Pa, imam još par primedbi.

Stičem utisak da jedan proizvod može da pripada samo jednoj kategoriji. Ako to jeste slučaj, onda priložena šema nije odgovarajuća, idKategorije bi trebao da bude strani ključ za proizvode, a unakrsna tabela Proizvodi_Kategorije postaje suvišna.

To je ako je takva situacija, mada nisam siguran da li kategorizacija komponenti može da bude dovoljno dobra da će korisnik iz prve da pogodi kategoriju u kojoj se nalazi proizvod koji traži. Razmisli dvaput...

Drugo, nije mi jasna razlika između Konfiguracije i Narudžbe, molio bih pojašnjenje.

slavkan 05. 09. 2011. 15:21

Citat:

Originalno napisao noviKorisnik (Napišite 101396)
E, dobro je što ste se javili, jer me je razdrmala ova primedba za 'osnovna i srednja', bah...

Pa, imam još par primedbi.

Stičem utisak da jedan proizvod može da pripada samo jednoj kategoriji. Ako to jeste slučaj, onda priložena šema nije odgovarajuća, idKategorije bi trebao da bude strani ključ za proizvode, a unakrsna tabela Proizvodi_Kategorije postaje suvišna.

To je ako je takva situacija, mada nisam siguran da li kategorizacija komponenti može da bude dovoljno dobra da će korisnik iz prve da pogodi kategoriju u kojoj se nalazi proizvod koji traži. Razmisli dvaput...

Drugo, nije mi jasna razlika između Konfiguracije i Narudžbe, molio bih pojašnjenje.


Pa ja sam govorio to da meni nije logicno da proizvodi i kategorije budu u vezi M:N jer sam lepo rekao da cu pod kategorijama podrazumevati : PROCESORE, MONITORE,TASTATURE itd a pod proizvodima INTEL CORE 2 DUO, AMD ATHLON 64 itd itd i ova dva proizvoda mogu samo da pripadaju jednoj kategoriji i to PROCESORIMA i to je to i vazi tvoja primedba za strani kljuc.

Sto se tice Konfiguracije i Narudzbe: Narudzbe prave registrovani korisnici tj biraju odgovarajuce proizvode iz odgovarajucih kategorija (prave sami sebi konfiguraju koju hoce da kupe), a Konfiguracije se ticu administratora koje takodje on pravi na osnovu proizvoda iz odredjenih kategorija i nudi kupcima kao takve, znaci kao neka ponuda kupcima gotovih konfiguracija. Eto ukratko

slavkan 05. 09. 2011. 23:34

Mene zanima kako sad popuniti ove tabele, tj kojim redosledom ?

Ako admin ima pravo da manipulise proizvodima i kategorijama , na koji nacin ce on da unosi podatke. Nekako je logicno da prvo unese sve kategorije a onda da unosi proizvode i da bira u koju kategoriju ce da smesta neki proizvod?!?

Imam osecaj da cu nesto zabrljati sa ovi id - ovima, da li je dobro da za ova polja koja cuvaju id-ove (kao primarne kljuceve) ostavim auto-increment?


Vreme je GMT +2. Trenutno vreme je 11:01.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.