Mysql szerkezet
Sziasztok, segítségre lenne szükségem.
Rendszer: PHP / Codeigniter + Mysql
A jelenlegi meglévő szerkezet:
Adva vannak elemek, kategóriák szerint csoportosítva - 10 különböző - és így listázva az adott oldalon. Ezek közül van olyan kategória, ami további alkategóriákra oszlik. Az alkategóriáknak több csoportjuk van és 1 elem több csoportba is tartozhat. Jelenleg az összes alkategória és hozzá tartozó elem 1 táblában van tárolva. Pl.: Szállások kat. : típusa ( Hotel *** ) + jellege ( wellness ). Többféle típus és jelleg van, 1 szállás rendelkezik 1 típussal és akár több jelleggel. Ez mind 1 táblában van, mint alkategória tábla: alkategoria_neve | elem_id.
Feladat: Szeretnék szűrhetővé tenni alkategóriák alapján a lekérdezett listát.
Értelemszerűen több típus és jelleg lehet egyszerre a feltétel, így azt gondolom ezzel a felállással ez nem megoldható.
Az én megoldásom az lenne eddig:
Mivel a különböző kategóriák különböző alkategóriákkal rendelkeznek, vagy egyel sem, így az hogy kibővítem a táblát több oszloppal ( szállás típusa, jellege, stb ) szerintem nem jó megoldás, mivel sok üres cella maradna.
Amire gondoltam az az, hogy minden alkategóriának létrehozok egy külön táblát ( ez jelenleg kb 6 db ) pl: szállás típusa tábla: típus | elem
Így megoldható, hogy megkapjam a keresett alkategóriák halmazát ( hotel** + hotel*** / wellness ) és nem lesznek redundáns tábláim se. Könnyen bővíthető.
Viszont egy komplett lekérdezésben így akár lehet 6 JOIN is!
Ez mennyire lenne problémás?
Mi a véleményetek erről a megoldásról? Van más lehetőség is amire nem gondolok?
Előre is köszönök minden tanácsot és tippet!
Üdv!
■ Rendszer: PHP / Codeigniter + Mysql
A jelenlegi meglévő szerkezet:
Adva vannak elemek, kategóriák szerint csoportosítva - 10 különböző - és így listázva az adott oldalon. Ezek közül van olyan kategória, ami további alkategóriákra oszlik. Az alkategóriáknak több csoportjuk van és 1 elem több csoportba is tartozhat. Jelenleg az összes alkategória és hozzá tartozó elem 1 táblában van tárolva. Pl.: Szállások kat. : típusa ( Hotel *** ) + jellege ( wellness ). Többféle típus és jelleg van, 1 szállás rendelkezik 1 típussal és akár több jelleggel. Ez mind 1 táblában van, mint alkategória tábla: alkategoria_neve | elem_id.
Feladat: Szeretnék szűrhetővé tenni alkategóriák alapján a lekérdezett listát.
Értelemszerűen több típus és jelleg lehet egyszerre a feltétel, így azt gondolom ezzel a felállással ez nem megoldható.
Az én megoldásom az lenne eddig:
Mivel a különböző kategóriák különböző alkategóriákkal rendelkeznek, vagy egyel sem, így az hogy kibővítem a táblát több oszloppal ( szállás típusa, jellege, stb ) szerintem nem jó megoldás, mivel sok üres cella maradna.
Amire gondoltam az az, hogy minden alkategóriának létrehozok egy külön táblát ( ez jelenleg kb 6 db ) pl: szállás típusa tábla: típus | elem
Így megoldható, hogy megkapjam a keresett alkategóriák halmazát ( hotel** + hotel*** / wellness ) és nem lesznek redundáns tábláim se. Könnyen bővíthető.
Viszont egy komplett lekérdezésben így akár lehet 6 JOIN is!
Ez mennyire lenne problémás?
Mi a véleményetek erről a megoldásról? Van más lehetőség is amire nem gondolok?
Előre is köszönök minden tanácsot és tippet!
Üdv!
azonos tartalom típusok
Azonos tartalom típusok egy tábla.
Ha a kategória és alkategória azonos információt hordoz, akkor ez egy tábla, csak egy szülő id mező is kell.
Tulajdonság az elemtől külön, elem id, név, érték.
Így egy elemnek bármennyi akármilyen tulajdonság lehet.
Azt hiszem 3 táblába be is fért. :)
Ha mutatsz jelenlegi adatbázis tervet, könnyebb segíteni.
Nem keret rendszer függő, ez szimpla adatbázis tervezés.
Szerk. A csoport ki maradt, de annak szerepe nem is tiszta nekem a leírás alapján.
Bocs ha nem volt teljesen
A probléma egyrészt az, hogy ez egy meglévő rendszer, csak át kellene alakítanom.
A táblák fel vannak töltve adatokkal, amit szintén át kell vinni valamilyen módon, ha átrendezem a struktúrát.
A jelenlegi helyzet egyszerűsítve:
kliens_adat tábla:
ID | Kategória | Név | stb...
-------------------------------
1 | szállás | Hotel1
2 | szállás | Hotel2
3 | étel_ital | Büfé1
4 | étel_ital | kávézó1
kliens_alkategória tábla:
ID | Alkategória_neve | Kliens_ID
------------------------------------
1 | hotel** | 1
2 | wellness_hotel | 1
3 | hotel*** | 2
4 | wellness_hotel | 2
5 | étterem | 3
6 | kávézó | 4
A konkrét probléma ( többek között.. ), hogy így nem lekérdezhető pl:
a csak 2 csillagos - wellness hotel!
11 különféle kategória van és jelenleg 4 féle, kategória specifikus, alkategória "csoport".
Ezalatt azt értem pl: szállásoknak lehet típusa - hotel**, hotel***, ... és lehet jellege - wellness, golf, akármi. Étteremnek - jellege: kínai, magyar, stb
A legjobb megoldás lehetne, ahogy mondtad, hogy alap közös adatok megmaradnának kliens_data táblában és az egyéni kategória specifikus adatok pedig 1 extra tábla,
vagy esetleg külön alkategória táblák pl szállás_jelleg , szállás_típus stb
Van valami "viszonylag" egyszerű módja, hogy a meglévő adatokat átvigyem az új struktúrába?
import script
Egyébként így is le lehet kérdezni a ** wellness t.
Hogyan kérdezzem le?
Kicsit több...
Szóval ezért jobb megfelelő adatbázis szerkezetet használni.
A jelenlegi nem tudja a kategória szülő - gyerek kapcsolatot sem.
Olyat nem érdemes csinálni, hogy egy tartalom típus példányának neve a tábla, és annyi tábla, ahány példány. Azt nem tudod jól kezelni.
integer + bitmask
ha viszonylag fix és véges elemszámról beszélünk, akkor egész érdekes dolgokat lehet kihozni egy integer mezőből
mondjuk azt, hogy négy bájtos egy integer (32bit), neked van 6 alkategóriád, akkor egy kategóriára jut 5 bit, abban el tudsz tárolni 31+1 (ami a nulla) féle értéket.
szemléltessük inkább 4bit-es csoportokkal
0000 0110
ez annyit jelent, hogy az 1-es kategóriában a 6-os alcsoportba tartozik
1001 0000
ez annyit tesz, hogy a 2-es kategóriában 9-es alcsoportba tartozik
de lehet ez összetett is
1100 0101
1-es kategória 5-ös alcsoport, kettes kategória 12-es alcsoport
aztán már csak a bitwise operátorokkal kell megbírkózni, de nem vészes az. mysql szinten is van.
érzésre, szerintem elég gyors kellene, hogy legyen, de ha valaki tud az ellenkezőjéről az szóljon.
a kategóriákat meg felépíted php kódban konstansokkal! olyan mint az error_reporting beállítása tkp. majdnem.
érdekes
Nem rossz, de gondolom a kategóriáknak neve, leírása is van + nem tudni a mélységet.
Ezeket a szöveges adatokat szintén érdemes db- ben tárolni. Innen nézve már meg is van az új tábla -> felesleges a bit mask.
Az adatbázis tervezés egyik legnagyobb sarokpontja a "mi való ide, mi kell külön táblába".