MySQL-ban, hogy lehet azt megoldani ha egy mezőnek több értéke lehet?
Pl. van egy properties tábla benne a termék tulajdonságok neveivel és azonosítóival egy products táblában meg a termékek.
Ha egy termékre valamilyen tulajdonságot szeretnék rárakni akkor a products_properties táblában létrejön egy új rekord amiben benne van a property azonosítója, a termék azonosítója és végül maga az érték ami legyen 'value'.
Itt a 'value' milyen értéket kell kapjon ha abban lehet int, float, boolean és varchar?
Én úgy gondolom, hogy ebben az esetben varchar lenne a legjobb mert abban lehet az előző hármat is tárolni.
Van ettől jobb, másabb megoldás?
Még olyat találtam ahol minden érték típusnak létrehoznak egy külön táblát tehát lenne products_properties_text, products_properties_int, products_properties_boolean és products_properties_float ahol a 'value' mindig az adott tábla szerinti érték típust viseli.
És azt is olvastam, hogy ebben az esetben a MongoDB ajánlott inkább mert ott nincsenek előre definiált értékek.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Hát, ha egy adatbázisban ilyenekhez kell folyamodni, akkor ott az adatbázisstruktúrában valami nagyon nem jó. De ha nagyon muszáj meglépni, akkor json adattípusként tárolnám, mert azt könnyen tudod kezelni a programodban. Bár itt is írják, hogy habár lehet így tárolni, ez nem azt jelenti, hogy így kell...
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
"Én úgy gondolom, hogy ebben az esetben varchar lenne a legjobb mert abban lehet az előző hármat is tárolni."
Én is így gondolom.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Őszintén szólva ez már programozói oldalról sem teljesen oké. Tegyük fel, hogy mondjuk C#-ban fejlesztesz, a tábla reprezentációja hogyan nézne ki?
List<KeyValuePair<string, dynamic>>
Én azt csinálnám, hogy van maga a termékeket tároló tábla:
- product_id
- name
- product_type
Minden egyes product type-nak lenne táblája, az adott termékfajta jellemzőivel. Ez se könnyíti meg a kezelhetőséget, de számomra nem annyira tűnik kókányolásnak, mint egy kulcs-érték tábla.
Persze az igazi megoldás tényleg egy document alapú NoSQL adatbázis lenne szerintem.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Ha jól értem, ez a szóba forgó tábla:
products_properties(id, product, value)
Bocs, de nem értem, hogy a value az mi akar lenni? Ha beírom, hogy "fűnyíró", akkor azt értem, hogy a termék egy fűnyíró. De azt írod lehet pl. számot is tenni a value-ba. Azt hogyan kellene értelmeznem, hogy "2"? A termék 2? 2 mi?
Valami logikai baki van itt, vagy csak én nem értem, hogy mire való ez a tábla. Elmagyarázod?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
#7: szeritnem ilyesmire gondol:
termék: XY telefon
property: kijelzőméret
value: 6.5
property: RAM
value: 128
property: szín
value: kék
És nyilván az egyes propertykhez van mértékegység valahol tárolva.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Értem, tehát a következőket tároljuk a termékről:
products_properties(2, 'xbox', '2')
products_properties(43, 'xbox', 'fekete')
products_properties(44, 'xbox', '12')
products_properties(67, 'xbox', '1G')
products_properties(99, 'xbox', '512')
Honnan tudom, hogy melyik value micsoda? Ennek így semmi értelme nincsen, ez szimplán egy rossz adatszerkezet. Adatbázisban nincs ilyen, hogy kevert adattípus, azokat szét kell választani külön-külön.
Pl. a fenti példa esetén products_colors, products_disksize, stb. vagy egyetlen táblába value_color, value_disksize.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
#9:
Szerintem így érti a kérdező:
products_properties(2, 5, '2')
products_properties(43, 5, 'fekete')
products_properties(44, 5, '12')
products_properties(67, 5, '1G')
products_properties(99, 5, '512')
és van egy producta támla:
1, tv
2, laptop
5, xbox
és egy proprety tabla:
43, szin
67, ram
99, hdd
2, ?
44, ?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!