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.
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...
"É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.
Ő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.
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?
#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.
É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.
#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!