Adatbázisok‎ > ‎

Normalizálás

A normalizálás értelmét egy példán keresztül mutatjuk be. Képzeljük el, hogy egy könyvkereskedés megrendeléseit szeretnénk adatbázisban tárolni. Első nekifutásra próbálkozhatunk a következő táblával:

 Cím Szerző  Ár  Db Megrendelő Rendelési cím  Rendelés dátuma
 Az ellenállás melankóliája  Krasznahorkai L.  3500 Kis Pista  1234 Város u. 3. 2012.01.30. 
 Java programozás  J. Gosling  8200 Nagy Éva  1111 Park u. 1.  2011.11.20. 
 Az ellenállás melankóliája  Krasznahorkai L.  3500 Tél Tamás   4321 Patak út 2. 2012.01.11.
 A Sinistra-körzet  Bodor Ádám  4100 Kis Pista  1234 Város u. 3.  2012.01.31.
 ...            

Ezzel a tábla-tervvel több problémánk is adódhat.

Redundancia

Az adatbázis feleslegesen többször tárolja a megrendelők adatait. Ez helypazarló, hálózati elérés esetén lassítja is az adatbázis hozzáférést ( hiszen több adatot kell mozgatni ).

Módosítási anomália

Ha "Kis Pista" megrendelő módosítani szeretné a rendelési címet, akkor ezt több helyen is meg kell tennünk. Ha nem minden rekordot frissítünk, akkor az adatbázisban belső ellentmondás jelenhet meg.

Törlési anomália

Ha töröljük "Nagy Éva" megrendelését, akkor elveszítjük a "Java programozás" című könyvre vonatkozó adatokat, pedig lehet, hogy később valaki pont ezt a könyvet szeretné megrendelni.

A megoldás

A felsorolt anomáliákat az adatbázis normalizálásával szokás kiküszöbölni. A formális definíció helyett a fenti példát folytatva megmutatjuk, hogyan történhet ez. A belső függőségeket tartalmazó táblákat több részre vágjuk.
Például: tegyük fel, hogy egy  megrendelő  mindig azonos címre rendeli a könyveket. Ekkor célszerű a megrendelőket külön táblában tárolni.

 id megrendelő rendelési cím 
 1  Kis Pista  1234 Város u. 3.
 2  Nagy Éva  1111 Park u. 1.
 3  Tél Tamás  4321 Patak út. 2.

A könyvek adatait is külön fogjuk tárolni, hiszen a kínálat és a pillanatnyilag élő megrendelések általában nem fedik egymást.

 id cím szerző  ár
 1  Az ellenállás melankóliája  Krasznahorkai László  3500
 2  Java programozás  James Gosling  8200
 3  A Sinistra-körzet  Bodor Ádám  4100

Végül a megrendeléseknél a vevőre és a könyvre most már elég az egyedi azonosítóval hivatkozni.

 id dátum  r_id  k_id   db
 1   2012.01.30.  1  1  1
 2  2011.11.20.  2  2  2
 3  2012.01.11.  3  1  1
 4  2012.01.31.  1  3  1

Ullmann jegyzet