MySQL struktura, nekaj vprašanj
4 naročniki
4 naročniki
Pri učenju osnov MySQL in PHP sem naletel na nekaj težav, za katere ne najdem odgovora s pomočjo googla.
In sicer imam tri tabele, ki so vezane druga na drugo. Produkti, proizvajalci, serije. In sicer potem lahko na strani prikažem posamezen produkt z vsemi podatki proizvajalec->serija->produkt. Kot primer: ford->focus->1.6 16V
Ker nameravam nekoč postaviti na strani tudi iskalnik v obliki filtra me zanima kaj narediti pri tistih poljih, kjer je opcij za vnos več. Torej, če ostanemo pri prejšnjem primeru, kaj narediti pri recimo polju barva, ko je lahko možnosti več.
Pri produktih, ki jih nameravam vnesti v bazo je namreč tako, da jih z eno majhno spremembo izdelujejo tudi do osem različnih. Na primeru z avtomobili bi to bilo tako kot, da bi recimo lahko avto naročil v štirih barvah in z recimo šestimi različnimi volanskimi obroči.
Sedaj me zanima ali moram za vsako tako možnost narediti nov vnos v tabelo produktov ali obstaja kakšna možnost, da v tista polja, ki omogočajo več vnosov vpišem več podatkov. Seveda je pri tem bistveno, da obstaja kasnejša možnost filtriranja produktov ravno po vsakem od teh kriterijev posamično.
Torej obstaja kaka možnost, da zapišem v field v bazi recimo: črna, bela, rdeča in je potem v iskalniku mogoče, da ne glede na to katero od teh treh barv izberemo, da nam vedno izpiše med rezultati tudi ta produkt?
12 odgovorov
Types of Relationships, tole si preberi, pa ti bo vse jasno... To, kar ti isces, je one-to-many relationship.
http://www.wellho.net/solutions/mysql-many-to-many-table-mapping-pivot-tables.html
Tukaj je to zelo lepo razloženo, kar se tiče relacij. Se mi pa tukaj zgodi, da dobim vse mogoče kombinacije, ne pa da bi pri enem produktu dobil prikazane možnosti.
Konkretno, na strani želim prikazati specifikacije določnenega avtomobila: po sistemu iz prvega linka bi mi recimo izpisalo 24 različnih kombinacij istega avtomobila. Torej v 4rih različnih barvah in v vsaki barvi 6 različnih možnosti volanskega obroča.
Jaz pa iščem možnost, da bi izpisal specifikacije le za en avto in nato pri polju barva navedel 4 različne barve in pri polju volanski obroč 6 različnih volanskih obročev.
Problem je ta, da bi mi izpisovanje vseh kombinacij enostavno vzelo daleč preveč prostora na strani. Če ima kdo kako idejo za rešitev bom še kako vesel vsake pomoči.
De_Tomaso, na tem linku je sicer zelo lepo razlozeno nekaj o many-to-many relacijah in pivot tabelah, kar pa ni to, kar ti isces :) Ti isces one-to-many, kot sem ti ze povedal zgoraj, preberi si se enkrat besedilo, do katerega sem ti dal povezavo...
Se oproščam, ker nisem prej napisal, ampak en produkt ima lahko več lastnosti in več produktov ima lahko enako lastnost.
En avto lahko ima 4 barve in 3 različni avti so lahko enake barve.
Sem pa vmes že malo naštudiral kako bi se rešil problema.
Milsim, da bom na strani recimo od posameznega avta izpisal iz tabele specifikacij vse podatke, potem bom pa pri barvi naredil repeat region, za katerega bom združil pivot tabelo in tabelo barv. Za pogoj pa bom postavil avtoID od tistega avta, za katerega bom izpisoval specifikacije.
Se lotevam tega vsaj približno pravilno?
To je se vedno one-to-many :) Saj si to tudi po slovensko napisal:*en (ONE) avtomobil ima lahko 4 (MANY) barve
*razlicni (MANY) avtomobili so lahko enake (ONE) barve
v obeh primerih ONE-TO-MANY, kajne?
Vsekakor pa bos potreboval tudi pivot tabele, ki jih imas opisane v dokumentu, ki si ga omenil.
tabelaavtomobilov <-1:M-> pivottabelaavtomobilibarve <-M:1-> tabela_barv
Iskanja bos potem lahko izvajal s pomocjo teh pivot tabel.