Adatbázis harmadik normál formában (3NF)

A harmadik normál űrlap (3NF) egy adatbázis elv, amely támogatja az adatok integritását azáltal, hogy az első normál űrlap (1NF) és a második normál űrlap (2NF) által biztosított adatbázis normalizációs elvekre épül .

Harmadik normál formára vonatkozó követelmények

Az adatbázisnak két alapvető követelménye van, hogy harmadik normál formában legyen:

Az elsődleges kulcsfüggőségről

Vizsgáljuk tovább, hogy mit értünk azzal, hogy minden oszlopnak az elsődleges kulcstól kell függenie.

Ha egy oszlop értéke mind az elsődleges kulcsból, mind a táblázat egy másik oszlopából származik, akkor megsérti a 3NF értéket. Tekintsük az Alkalmazottak táblázatot ezekkel az oszlopokkal:

Mind a LastName, mind a FirstName csak a EmployeeID értékétől függ? Nos, a LastName függhet a FirstName-től? Nem, mert a LastName benne rejlő tulajdonságok nem utalnak a FirstName értékére. Lehetséges, hogy a FirstName a LastName-től függ? Még egyszer, mert ugyanaz igaz: bármi is lehet a LastName, nem tudott utalni a FirstName értékére. Ezért ez a táblázat 3NF-kompatibilis.

De fontolja meg a Járművek táblázatot:

A gyártó és a modell a VehicleID-ből származhat - de a modell származhat a gyártótól is, mert a jármű modellt csak egy adott gyártó gyártja. Ez a táblázat nem 3NF-kompatibilis, és ezért adat-anomáliákhoz vezethet. Például frissítheti a gyártót a modell frissítése nélkül, pontatlanságokat vezetve be.

Ahhoz, hogy megfelelővé tegye, a másik függő oszlopot másik táblázatba kell áthelyezni, és idegen kulcs használatával kell hivatkozni. Ez két táblázatot eredményezne:

Járművek táblázata

Az alábbi táblázatban a ModelID egy külföldi kulcs a Modellek tábla számára:

Modellek táblázat

Ez az új tábla modelleket készít a gyártóknak. Ha egy adott modellre vonatkozó járműinformációkat szeretnél frissíteni, ezt a táblázatban kell elvégezned, nem pedig a Járművek táblázatban.

Származtatott mezők a 3NF modellben

Egy tábla tartalmazhat egy származtatott mezőt - amelyet a táblázatban szereplő többi oszlop alapján számítanak ki. Például, tekintse át a widget-megrendelések ezen táblázatát:

A teljes megszakítja a 3NF megfelelést, mivel az az egységárat a mennyiséggel szorozva származik, és nem teljes mértékben az elsődleges kulcstól függ. El kell távolítanunk az asztaltól, hogy megfeleljen a harmadik szokásos formának.

Valójában, mivel származik, jobb, ha egyáltalán nem tárolja az adatbázisban.

Egyszerűen kiszámíthatjuk "leterheljük" az adatbázis-lekérdezések végrehajtásakor. Előfordulhat, hogy korábban ezt a lekérdezést használtam a rendelési számok és összegek lekéréséhez:

SELECT sorszám, összesen FROM WidgetOrders

Mostantól a következő lekérdezést használhatjuk:

KIVÁLASZTÁS Rendelési szám, egységár * Mennyiség AS Összesen FROM WidgetOrders

hogy ugyanazokat az eredményeket érje el a normalizációs szabályok megsértése nélkül.