Legoptimálisabb termék tulajdonság kezelés
Sziasztok,
Szeretnék segítséget kérni abban, hogy az én élképzelésemben mi lenne a legjobb módja a termékek tulajdonság kezelésére.
Ez lenne az eredeti koncepció:
Vagyis vannak a termékek.
Vannak a tulajdonságok.
Van egy tulajdonság érték tábla amiben a tulajdonsághoz kapcsolt értékek vannak.
És van egy kapcsolótábla ami megmondja hogy melyik terméknek milyen tulajdonság értékei vannak.
A legnagyobb akadályba a keresésnél ütköztem.
Olyan keresést szeretnék indítani ahol azokat a termékeket kapom meg amiknek mondjuk 2 megadott tulajdonsága be van állítva és a tulajdonság értéke 2-3 érték közül valamelyik.
például:
azt a terméket ami ('kék' VAGY 'piros' VAGY 'sárga') ÉS ( '10kg' VAGY '20kg')
Nyilván a kék, piros, sárga és a 10kg, 20kg 1-1 tulajdonság értékei.
Eddigi kisérletezések alapján úgy látom, hogy ebben a struktúrában elég nehézkes lenne ilyen keresést végrehajtani. Vannak működő query-k, de túlságosan bonyolultak.
Szeretnék egy olyan megoldást ami a lehető legoptimálisabban képes kiszolgálni ezt a tulajdonság kezelést, akkor is ha teljes szerkezet átalakítással jár.
előre is köszi az ötleteket
■ Szeretnék segítséget kérni abban, hogy az én élképzelésemben mi lenne a legjobb módja a termékek tulajdonság kezelésére.
Ez lenne az eredeti koncepció:
Vagyis vannak a termékek.
Vannak a tulajdonságok.
Van egy tulajdonság érték tábla amiben a tulajdonsághoz kapcsolt értékek vannak.
És van egy kapcsolótábla ami megmondja hogy melyik terméknek milyen tulajdonság értékei vannak.
A legnagyobb akadályba a keresésnél ütköztem.
Olyan keresést szeretnék indítani ahol azokat a termékeket kapom meg amiknek mondjuk 2 megadott tulajdonsága be van állítva és a tulajdonság értéke 2-3 érték közül valamelyik.
például:
azt a terméket ami ('kék' VAGY 'piros' VAGY 'sárga') ÉS ( '10kg' VAGY '20kg')
Nyilván a kék, piros, sárga és a 10kg, 20kg 1-1 tulajdonság értékei.
Eddigi kisérletezések alapján úgy látom, hogy ebben a struktúrában elég nehézkes lenne ilyen keresést végrehajtani. Vannak működő query-k, de túlságosan bonyolultak.
Szeretnék egy olyan megoldást ami a lehető legoptimálisabban képes kiszolgálni ezt a tulajdonság kezelést, akkor is ha teljes szerkezet átalakítással jár.
előre is köszi az ötleteket
Így ebben a formában
item
-től aproperty
-ig)Ha jól értem, egy harmadik
igen igen. join-nal megkapom
join-nal megkapom az eredményt, de ha mondjuk 10 paraméterre szeretnék keresni, akkor 10 join kell hozzá. Szerintem ez már nem annyira optimális sql :)
A tulajdonságok és tulajdonság értékek száma a keresésben teljesen változó lehet.
Lehet én értem rosszul?
FROM item i
JOIN item_property_value ipv ON i.item_id = ipv.item_id
JOIN property_value pv ON pv.property_id = ipv.item_id
JOIN property p ON p.property_id = pv.property_id
WHERE
pv.property = 'kék' AND
pv.property = 'sárga' # aztán itt már annyi feltételt lehet összeciklusozni amennyi csak kell :)
ORDER BY p.property_name
Összekapcsolja az egészet, innentől kezdve csak a feltételekkel kell játszani
Ez így ebben a formában
szín=piros és súly=10kg
, nem pedig(szín=piros vagy szín=kék) és súly=10kg
), akkor elég lenne egy join, trükkös group by / having-gel.Ennek az általános leképzésnek a komplexitás az ára. Én mondjuk kivenném a
property_value
táblát, ésitem 1-* item_property_value *-1 property
leképzést csinálnék (és a tulajdonság értéke a kapcsolótáblába kerül). Persze ha fontos, hogy a mezők milyen értékeket vehetnek fel, akkor megmarad aproperty_value
tábla, én ekkor így csinálnám a leképzést:* 1
│ │
1 │
property_value *────┘
Meg kell vizsgálni, milyen osztályhierarchiát próbálsz betuszkolni az adatbázisba, és a bonyolultság függvényében egy hatékony leképzést kell választani (amit most csinálsz, az kb ez).
Nem teljesen értem, hogy az
document alapú tárolás?
sok JOIN le fogja ölni az adatbázist
Gondoltam rá, de mivel még
Ott ez az elképzelés sokkal járhatóbb? Végső soron ha kell áttérek mongora...
Le tudnád írni körülbelül azt a nosql lekérdezést ami azt az eredményt adja vissza amit én szeretnék?