Topic: Lentelės pavadinimas kaip lentelės įrašas?

Radau čia Povilo klausimą, kuris kiek panašus į mano, bet vistiek nesupratau, kaip geriau daryti...
(Beje, kol kas tik planuoju DB ant popieriaus, tai jokių MySQL konkretybių negaliu pateikt.

Situacija tokia: tarkime, kad aprašinėjam gražias vietas Lietuvoje. Vietos aprašymas kaip kokiame Yahoo! Directory susideda iš id, pavadinimo, aprašymo, kategorijos, iliustracijos, nuorodos į svetainę ir t.t. Daugiausiai man keblumų keliantis dalykas yra 'kategorija'. Pradedant pildyti duomenų bazę sunku numatyti visas reikalingas kategorijas ir smulkesnį jų skirstymą. Kol tuščia norėtųsi skirstyti labai stambiai: pvz., "Aukštaitija", "žemaitija" ir pan. Bet jau dabar aišku, kad ateity prireiks smulkesnio skirstymo. Taigi mano Kategorijų lentelė (su pvz. CatName, CatDescription) turės kažkaip plėstis. Pavyzdžiui "Aukštaitijos" kategorijai bus priskirta 20 įrašų apie Uteną, 15 apie Zarasus ir po 2-3 įrašus apie įvairias smulkesnes vietoves. Tęsiant Yahoo! analogiją, norėtųsi, kad atsirastų "Utena" ir "Zarasai" kaip "Aukštaitijos" subkategorijos, o smulkmė gultų tiesiai po pagrindine kategorija. Bet kaip suplanuoti lenteles, kad redaktoriams/administratoriams būtų paprasčiau tai padaryti? Dar daugiau - jei duomenis pildys lankytojas, kaip patogiau suplanuoti, kad pasirinkus pagrindinę kategoriją ("Aukštaitija"), tolesnis pasirinkimas atsirastų tik pagal realiai esamas subkategorijas ("Utena", "Zarasai", "bendras sąrašas")?

Dabar dėl pačios temos. Galvodamas apie sprendimą įsivaizdavau tokią kategorijų lentelę:
CatName, CatDescription, CatSubTableName
kur CatSubTableName būtų lentelės kiekvienai iš pagrindinių kategorijų pavadinimas. Tada pasirinkus kategoriją galima būtų per jos vardą surasti subkategorijų lentelę, įlįsti į ją, pažiūrėt ar ten yra skaidymas (default - nėra) ir jei toks yra, visus variantus pateikti pildytojui.

Tikriausiai labai kreivai čia sugalvota. Nes su MySQL dar nedirbau. Tai ir būtų įdomu sužinot, kaip tinkamiau tokiais atvejais planuoti duomenų bazę. Problema dažnam turėtų būti aktuali, nes duomenų kategorizavimas nežinant galutinio kategorijų kiekio ar net struktūros pasitaiko neretai :)

Re: Lentelės pavadinimas kaip lentelės įrašas?

La,

Tavo aprašytam scenarijui pilnai užtenka vienos lentelės. Naudoti atskiras lenteles kiekvienai kategorijai būtų apmaudi klaida.

Iš to kaip tu mąstai ir kokius sprendimus bandai pasirinkti sprendžiu, kad tau dar trūksta teorinių žinių susijusių su duomenų struktūrom. Iš karto rekomenduoju nesiimti projekto, kuriam realizuoti neturi reikiamų žinių. Visada galima rasti mažų projektų, kuriems realizuoti užteks mažesnio žinių bagažo ir kuriuos darydamas tobulėsi.

Iš principo darbas su MySQL'u yra labai panašus į darbą su kitomis DBVS, todėl nedidelė bėda jeigu nėrą patirties dirbant konkrečiai su MySQL'u (aišku, bendru atvejų yra visokių unikalių dalykų, kurių žinojimas arba nežinojimas gali atnešti naudos arba nuostolių).

Grįžtant prie kategorijų tinklapiuose tai galiu pasakyti, kad dažniausiai yra naudojamos medžių struktūros (hierachinės duomenų struktūros), kurios būna dėstomos universitetų/aukštųjų mokyklų pirmuose kursuose ir yra aprašomos įvairiose knygose pradedantiesiems programuotuojams.

Labai nesigilinant į niuansus, manau, kad tau turėtų tikti viena struktūra bendrai apžvelgiama čia: http://www.sitepoint.com/article/hierar … -database/