6. Redundancia, normalizálás, denormalizálás

Redundancia fogalma

Redundanciáról akkor beszélünk, ha

  • valamely tényt többszörösen tárolunk az adatbázisban,
  • vagy olyan adatokat tárolunk, amely más tárolt adatokból meghatározható.

A redundancia, a szükségtelen tároló terület lefoglalása mellett, komplikált adatbázis frissítési és karbantartási műveleteket jelenthet, melyek könnyen az adatbázis ellentmondásosságához vezethetnek.

A redundanciát meg kell különböztetni az értékek duplikált (többszörös) tárolásától. A duplikált adattárolásra szükségünk lehet a relációkban, míg a redundanciát el kell kerülni.

Normálformák - a redundancia megszűntetése

Öt normál formát különböztetünk meg. A különböző normál formák egymásra épülnek, a második normál formában levő reláció első normál formában is van. A tervezés során a legmagasabb normál forma elérése a cél. Az első három normál forma a funkcionális függőségekben található redundanciák, míg a negyedik és ötödik a többértékű függőségekből adódó redundanciák megszüntetésére koncentrál.

Első normál forma (1NF)

Egy reláció Első normál formában van, ha minden tulajdonsága egyszerű. Másképpen az adatbázis tábla minden oszlopában csak egy értéket tárolunk.

Hogyan hozzuk 1NF-re egy relációt?

  1. lehetőség: Ha több értéket tartalmaz egy mező egy sorban, akkor annyi sorra bontjuk a sort, ahány értéket tartalmaz a mező.
  2. lehetőség: Két vagy több relációra bontjuk az eredeti relációt és közös azonosítóval hivatkozunk a közös értékekre. Az egyik-ben az azonosító kulcs lesz, a többi relációban pedig a külső kulcs lesz.

Második normál forma (2NF)

A második normál pontos definíciója két feltétellel írható le.

  • A reláció Első normál formában van
  • A reláció minden másodlagos tulajdonsága teljes függ az összes reláció kulccsal.

Vagy

  • A reláció Első normál formában van,
  • Van kulcs a táblában.
  • Ha a kulcs összetett, akkor annak részeitől nem függnek a másodlagos tulajdonságok

Hogyan hozzuk 2NF-re egy relációt?

  • Kiemeljük a kulcsból azokat az tulajdonságokat, amelyek önállóan is meghatározzák a másodlagos attribútumokat.
  • Az így kapott Elsődleges tulajdonságokból és a tőlük függő másodlagos tulajdonságokból új relációt hozunk létre.

Harmadik normál forma (3NF)

Egy reláció harmadik normál formában van, ha

  • A reláció második normál formában van.
  • A reláció nem tartalmaz függőséget másodlagos tulajdonságok között

Vagy

  • A reláció második normál formában van.
  • Ha táblában nincsenek olyan ismétlődő nem kulcs információk, amelyek más táblákban nem kulcs információk.

Hogyan hozzuk 3NF-re egy relációt?

A relációt további relációkra bointjuk szét.

Boyce/Codd normál forma (BCNF)

Több kulccsal rendelkező relációk esetén egyes kuilcsok részei függhetnek más kulcsok részeitől. A BCNF-nek megfelel a reláció, ha minden Elsődleges tulajdonság függ azoktól a kulcsoktól, amelyeknek nem része, és azon kulcsok részeitől nem függ!

Negyedik normál forma (4NF)

Sajnos még a Boyce/Codd normál forma is tartalmazhat redundanciát. Mindeddig csak a funkcionális függőségeket vizsgáltuk, a többértékű függőségeket nem. A további két normál forma a többértékű függőségekből adódó redundancia kiszűrését szolgálja. Egy reláció negyedik normál formában van, ha egy XY többértékű függőséget tartalmazó relációban csak az X és Y-ban megtalálható attributumokat tartalmazza. Képzeljük el azt, hogy egy relációban tároljuk az apa, és gyermekeinek nevét valamint a gyermek hobbiját. Minden apának több gyermeke és minden gyereknek több hobbija is lehet.

Denormalizálás

A denormalizálásnak az adatbázis működési hatékonyságában vagy biztonságában van szerepe. Ilyenkor tudatosan redundanciát viszünk az adatbázisba. A denormalizálás nem feledékenység.

Mikor és hogyan célszerű a folyamatot véghezvinni?

  • Ha egy számított adatot tárolunk egy adatoszlopban, akkor lekérdezéseink egyszerűbbekké válhatnak, ezáltal természetesen gyorsabbá is. A megoldandó hogyan értesül az adatbázis arról, hogyha a számított oszlop a számítás alapjául szolgáló mezők értéke megváltozik.
    Megoldás: A válasz a triggerekben keresendő. A triggerek olyan automatikusan lefutó eljárások az adatbázisban, amelyek egy rekord megváltozásakor automatikusan lefutnak, tehát segítségükkel más értékek módosíthatók.
  • Ha egy vagy néhány segédoszlopot beviszünk az adatbázisba a lekérdezéseink bonyolultsága ugrásszerűen csökkenhet és a sebessége is drámaian nőhet.
  • Ha visszamenőleg tárolunk adatokat, és ezek utólag már nem változnak, az ilyen adatokat célszerű egy csak olvasható táblába elhelyezni, nem kell azokat napra készen a lekérdezésekben újra és újra szerepeltetnünk.
  • Ha az adatbázis felhasználói saját maguk készítenek lekérdezéseket gyakran elveszhetnek a normalizált táblák útvesztőiben, esetleg tudásuk hiányosságai vagy a probléma bonyolultsága miatt. Ilyenkor célszerű lehet a megfelelő denormalizálási eljárásokat megalkotni,