"C" relációs séma normalizálás ============================== Bevezetés --------- A kiindulópont négy külön CSV-fájl volt: - ``games_march2025_cleaned`` - ``games_march2025_full`` - ``games_may2024_cleaned`` - ``games_may2024_full`` A ``full`` állományok a teljes, nyers adatokat tartalmazták minden mezővel, míg a ``cleaned`` változatok előfeldolgozott, tisztított adatokkal rendelkeztek. A 2025-ös CSV-kben található egy további mező is (``discount``), amely a 2024-es verziókban még nem szerepelt. Normalizálás lépései -------------------- Első normálforma (1NF) ~~~~~~~~~~~~~~~~~~~~~~ - Az eredeti CSV-kben több attribútum nem atomi értékeket tartalmazott (pl. ``screenshots``, ``tags``, ``categories``, ``genres``, ``supported_languages``, ``full_audio_languages``). - Ezeket külön táblákba helyeztem, hogy minden attribútum atomi legyen. - Külön entitások jöttek létre: ``media``, ``screenshots``, ``movies``, ``description``, ``categories``, ``genres``, ``languages``, ``platforms``, ``packages``. - A nyelvi mezők (``supported_languages``, ``full_audio_languages``) két relációra bontva kerültek tárolásra: * ``game_subtitles`` – a játék–nyelv kapcsolat feliratként * ``game_audio_language`` – a játék–nyelv kapcsolat hang (szinkron) formájában Második normálforma (2NF) ~~~~~~~~~~~~~~~~~~~~~~~~~ - A játék fő táblájának elsődleges kulcsa az ``appid``. - Az olyan adatok, amelyek csak az ``appid``-tól függtek, de nem a játék többi jellemzőjét írták le, külön táblákba kerültek: * ``support`` – támogatási információk (URL, email) * ``media`` – fejléckép * ``screenshots`` – képernyőképek * ``movies`` – előzetesek, videók * ``description`` – részletes, rövid és általános leírások * ``categories`` – kategóriák * ``genres`` – műfajok * ``languages`` – nyelvek (önálló tábla, a megnevezésekkel) * ``developers`` – fejlesztők * ``publishers`` – kiadók * ``tags`` – címkék * ``platforms`` – támogatott platformok * ``packages`` – játékcsomagok (részletesen lásd lejjebb) - A redundáns szöveges ismétlődéseket megszüntettem úgy, hogy az entitások saját táblákban tárolják a neveket, és csak azonosítók szerepelnek a kapcsolatokban. Harmadik normálforma (3NF) ~~~~~~~~~~~~~~~~~~~~~~~~~~ - A tranzitív függőségeket megszüntettem: * a ``categories``, ``genres``, ``languages``, ``developers``, ``publishers``, ``tags``, ``platforms``, ``packages`` táblák önállóan tartalmazzák a megnevezéseket * a játék és ezek az entitások közötti több-több kapcsolatot külön asszociatív táblák kezelik - A csomagstruktúra három szinten valósul meg: * ``game_package (appid, packid)`` – a játék és csomag közötti kapcsolat * ``packages (packid, title, description)`` – a csomag alapadatai * ``sub_package (packid, sub_text, price)`` – az adott csomag al-elemei és ára - Asszociatív táblák: * ``game_category (appid, categoryid)`` * ``game_genre (appid, genreid)`` * ``game_subtitles (appid, languageid)`` * ``game_audio_language (appid, languageid)`` * ``game_developer (appid, developerid)`` * ``game_publisher (appid, publisherid)`` * ``game_tag (appid, tagid)`` * ``game_platform (appid, platformid)`` * ``game_package (appid, packid)`` - Így kiküszöböltem az adatredundanciát, és biztosítottam az adatok konzisztenciáját. Végső séma – "C" reláció ------------------------- A normalizálás eredményeként a **"C" séma** a következő relációkból áll: * ``game`` – játék alapadatai (appid, név, dátum, ár, értékelések, valamint a 2025-ös verziókban a ``discount`` mező) * ``support`` – támogatási információk * ``media`` – fejléckép * ``screenshots`` – képernyőképek * ``movies`` – előzetesek, videók * ``description`` – leírások * ``tags`` – címkék * ``genres`` – műfajok * ``platforms`` – platformok * ``categories`` – kategóriák * ``publishers`` – kiadók * ``developers`` – fejlesztők * ``languages`` – nyelvek (egyedi név) * ``packages`` – csomagok (alap adatok) * ``sub_package`` – csomag al-elemei (leírás és ár) Kapcsolótáblák: * ``game_tag`` – játék–címke kapcsolat * ``game_genre`` – játék–műfaj kapcsolat * ``game_platform`` – játék–platform kapcsolat * ``game_category`` – játék–kategória kapcsolat * ``game_publisher`` – játék–kiadó kapcsolat * ``game_developer`` – játék–fejlesztő kapcsolat * ``game_audio_language`` – játék–hangnyelv kapcsolat * ``game_subtitles`` – játék–felirat kapcsolat * ``game_package`` – játék–csomag kapcsolat Összefoglalás ------------- A **C relációs séma** eredménye egy egységes, tiszta és normalizált adatmodell, amely: - Négy külön CSV redundáns tárolásából egy konzisztens sémát hozott létre - Biztosítja az 1NF, 2NF és 3NF követelményeit - Külön kezeli a feliratokat (``game_subtitles``) és a hangnyelveket (``game_audio_language``) - Kezeli a több-több kapcsolatokat asszociatív táblák segítségével - Normalizáltan kezeli a csomagokat három szinten: játék–csomag, csomag–adat, csomag–alrész - Csökkenti az adatredundanciát és megkönnyíti a karbantartást - Rugalmasan kezeli a különbséget a 2024-es és 2025-ös adatforrások között (a ``discount`` mező a 2025-ös CSV-kben szerepel, a 2024-esekben nem) - Könnyen bővíthető a jövőben további entitásokkal és attribútumokkal Relációs séma diagram ---------------------- .. image:: ../Relational_data_models/C_normalized.svg :align: center :alt: C relációs séma diagram :class: image-group Dictionary ---------- Az **"C" adathalmaz dictionary-je** az alábbi linken érhető el: * `C dataset dictionary `_