Adatbázis-normalizálás

A normalizálás egy adatbázis-tervezési technika, amelyet egy relációs adatbázis-tábla tervezésére használnak egy magasabb normál formáig. A folyamat progresszív, és az adatbázis magasabb szintű normalizálása csak akkor érhető el, ha a korábbi szinteket teljesítették.

Ez azt jelenti, hogy az adatok nem normális formában (a legkevésbé normalizáltak) és a legmagasabb érték elérésére irányulnak. A normalizálás szintje az első lépés az első normál forma betartásának biztosítása, a második lépés a második normális forma teljesülésének biztosítása, és így tovább a fent említett sorrendben, amíg az adatok nem felelnek meg a hatodik normál formának.

Érdemes azonban megjegyezni, hogy a 4NF-n felüli normál formák elsősorban akadémiai érdeklődésre tartanak számot, mivel a problémák, amelyek megoldására léteznek, a gyakorlatban ritkán jelentkeznek. szándékosan úgy tervezték, hogy ellentmondjon a normális formák többségének. A való életben teljesen lehetséges, hogy kihagyhatunk néhány normalizálási lépést, mert a táblázat nem tartalmaz semmit, ami ellentmondana az adott normális formának. Gyakran előfordul az is, hogy egy normál forma megsértésének kijavítása egy magasabb rendes forma megsértését is kijavítja a folyamat során. Szintén minden táblázatban egy táblázatot választottak a normalizáláshoz, ami azt jelenti, hogy a példa folyamatának végén még mindig lehetnek olyan táblák, amelyek nem felelnek meg a legmagasabb normál formának.

Initial dataEdit

Hagyjon egy adatbázistáblát a következő felépítéssel:

Cím Szerző Szerző Nemzetisége Formátum Ár Tárgy Oldalak Vastagság Kiadó Kiadó országa Kiadvány típusa Műfaj azonosítója Műfaj neve
MySQL adatbázis-tervezés és optimalizálás kezdete Chad Russell amerikai keménytáblás 49.99 MySQL,

adatbázis,

tervezés

520 Vastag Apress USA E-könyv 1 oktatóanyag

Ebben a példában feltételezzük, hogy minden könyvnek csak egy szerzője van.

1NFEdit kielégítése

Az 1NF kielégítéséhez a táblázat minden oszlopában szereplő értékeknek atomnak kell lenniük. A kezdeti táblázatban a Subject tartalmaz egy sor tárgyértéket, vagyis nem felel meg.

Az 1NF elérésének egyik módja az lenne, ha a párhuzamosságokat több oszlopra osztaná ismétlődő Subject csoportokkal:

Cím Formátum Szerző Szerző nemzetisége Ár 1. tárgy 2. tárgy 3. tárgy oldal Vastagság Kiadó Kiadó országa Műfajazonosító Műfaj neve
MySQL adatbázis-tervezés és optimalizálás kezdete Keménytáblás Chad Russell amerikai 49.99 MySQL adatbázis Tervezés 520 Vastag Apress USA 1 oktatóanyag

Bár most a táblázat formálisan megfelel az 1NF-nek (atomi), a probléma ezzel a megoldással nyilvánvaló – ha egy könyvnek háromnál több tárgya van, ezért nem lehet hozzáadni az adatbázishoz anélkül, hogy megváltoztatná annak szerkezetét. saját táblázataikba. Ebben az esetben ez a Könyv, Tárgy és Kiadó táblákat eredményezné:

Könyv
Cím Formátum Szerző Szerző Nemzetisége Ár Oldalak Vastagság Műfajazonosító Műfaj neve Kiadói azonosító
MySQL kezdete Adatbázis-tervezés és optimalizálás keménytáblás Chad Russell amerikai 49.99 520 Vastag 1 Oktatóanyag 1
Tárgy
Tárgyazonosító Tárgy neve
1 MySQL
2 Adatbázis
3 Tervezés
Publisher
Publisher_ID Név Ország
1 Apress USA

A kezdeti adatok egyszerű táblákra történő szétválasztása megszakítaná az adatok közötti kapcsolatot. Ez azt jelenti, hogy meg kell határozni az újonnan bevezetett táblák közötti kapcsolatokat. Figyelje meg, hogy a Könyv táblázat Kiadóazonosító oszlopa egy idegen kulcs, amely felismeri a könyv és a kiadó közötti sokoldalú kapcsolatot.

A könyv sok tantárgyhoz illeszkedhet, valamint egy tantárgy is sok könyvnek felel meg. Ez azt is jelenti, hogy meg kell határozni a sok-sok kapcsolatot, amelyet el kell érni egy linktábla létrehozásával:

Cím – Tárgy
Cím Tárgyazonosító
MySQL adatbázis tervezés és optimalizálás kezdete 1
MySQL adatbázis tervezés és optimalizálás kezdete 2
MySQL adatbázis tervezés és optimalizálás kezdete 3

Egy nem normál formájú táblázat helyett most 4 tábla van, amely megfelel az 1NF-nek.

A 2NFEdit kielégítése

A Book táblának egy jelölt kulcsa van (ami tehát az elsődleges kulcs), a {Title, Format} összetett kulcs. Vegye figyelembe a következő táblázatrészletet:

Book
Title Formátum Szerző Szerző Nemzetiség Ár Oldalak Vastagság Műfajazonosító Műfaj neve Kiadói azonosító
MySQL adatbázis tervezés és optimalizálás kezdete keménytáblás Chad Russell amerikai 49.99 520 vastag 1 oktatóanyag 1
MySQL adatbázis tervezés és optimalizálás kezdete E-könyv Chad Russell amerikai 22.34 520 Vastag 1 Oktatóanyag 1
Az adatbázis-kezelés relációs modellje: 2. verzió E-könyv EFCodd brit 13.88 538 Vastag 2 Népszerű tudomány 2
Az adatbázis relációs modellje nagement: 2. verzió Puhakötés EFCodd brit 39.99 538 Vastag 2 Népszerű tudomány 2

Az összes attribútum, amely nem része a jelölt kulcsnak, a címetől függ, de csak az ár függ a formátumtól. A 2NF megfeleléséhez és az ismétlődések eltávolításához minden nem jelölt kulcs attribútumnak a teljes jelölt kulcstól kell függenie, nem csak annak egy részétől.

A táblázat normalizálásához tegye a (z) {Title} (egyszerű) jelölt kulcsot (az elsődleges kulcs) úgy, hogy minden nem jelölt kulcs attribútum a teljes jelölt kulcstól függ, és távolítsa el az Árat egy külön táblába, hogy megőrizhető legyen a formátumtól való függősége:

Könyv
Cím Szerző Szerző Nemzetiség Oldalak Vastagság Műfaj azonosítója Műfaj neve Kiadói azonosító
MySQL adatbázis tervezés és optimalizálás kezdete Csád Russell amerikai 520 vastag 1 oktatóanyag 1
Az adatbázis-kezelés relációs modellje: 2. verzió EFCodd brit 538 Vastag 2 Népszerű tudomány 2
Formátum – Ár
Cím Formátum Ár
MySQL adatbázis tervezés és optimalizálás kezdete Keménytáblás 49.99
MySQL adatbázis tervezés és optimalizálás kezdete E-könyv 22.34
Az adatbázis-kezelés relációs modellje: 2. verzió E-könyv 13.88
Az adatbázis-kezelés relációs modellje: 2. verzió Puhakötés 39.99

Most, a Book táblázat megfelel a 2NF-nek.

A 3NFEdit kielégítése

A Book táblázat továbbra is tranzitív funkcionális függőséggel rendelkezik (a {Author Nationality} a {Author} függvénye, amely a {Title függvénye) }). Hasonló megsértés létezik a műfajok esetében is (a {Műfaj neve} a {Műfajazonosító} függvénye, amely a {Cím} függvénye). Ezért a Könyv táblázat nem a 3NF-ben található. A 3NF-ben való elkészítéséhez használjuk a következő táblázati struktúrát, ezzel kiküszöbölve a tranzitív funkcionális függőségeket azáltal, hogy a {Author Nationality} és a {Genre Name} elemeket saját táblázataikba helyezzük:

Könyv

Cím Szerző Oldalak Vastagság Műfajazonosító Kiadói azonosító
MySQL adatbázis-tervezés kezdete és Optimalizálás Chad Russell 520 Vastag 1 1
Az adatbázis-kezelés relációs modellje: 2. verzió EFCodd 538 Vastag 2 2
Formátum – Ár
Title Formátum Price
MySQL adatbázis-tervezés kezdete és Optimalizálás keménytáblás 49.99
MySQL adatbázis tervezés és optimalizálás kezdete E-könyv 22.34
Az adatbázis-kezelés relációs modellje: 2. verzió E-könyv 13.88
Az adatbázis-kezelés relációs modellje: 2. verzió Puhakötés 39.99
Szerző
Szerző Szerző nemzetisége
Chad Russell amerikai
EFCodd brit
Műfaj
Gen re ID Műfaj neve
1 Oktatóanyag
2 Népszerű tudomány

Az EKNFEdit kielégítése

Fő cikk: Normál kulcs normál alakja

Az alap kulcs normál alakja (EKNF) szigorúan a 3NF és a BCNF közé esik, és az irodalomban nemigen tárgyalták. Célja “mind a 3NF, mind a BCNF kiemelkedő tulajdonságainak megragadása”, elkerülve mindkettő problémáját (nevezetesen, hogy a 3NF “túl megbocsátó”, és a BCNF “hajlamos a számítási bonyolultságra”). Mivel az irodalomban ritkán említik, ez nem szerepel ebben a példában.

A 4NFEdit kielégítése

Tegyük fel, hogy az adatbázis egy könyvkereskedő franchise tulajdonában van, amelynek több franchise-tulajdonos rendelkezik, amelyek különböző helyeken üzletekkel rendelkeznek.Ezért a kiskereskedő úgy döntött, hogy hozzáad egy táblázatot, amely tartalmazza a könyvek különböző helyeken való elérhetőségét:

Franchise-vevő – Könyv hely
Franchise-azonosító Cím Hely
1 MySQL adatbázis tervezés és optimalizálás kezdete Kalifornia
1 MySQL adatbázis tervezés és optimalizálás kezdete Florida
1 MySQL adatbázis tervezés és optimalizálás kezdete Texas
1 Az adatbázis-kezelés relációs modellje: 2. verzió Kalifornia
1 Az adatbázis-kezelés relációs modellje: 2. verzió Florida
1 Az adatbázis-kezelés relációs modellje: verzió 2 Texas
2 MySQL adatbázis tervezés és optimalizálás kezdete Kalifornia
2 A MySQL adatbázis tervezésének és optimalizálásának kezdete Florida
2 MySQL adatbázistervezés és optimalizálás kezdete Texas
2 Az adatbázis-kezelés relációs modellje: 2. verzió Kalifornia
2 Az adatbázis-kezelés relációs modellje: 2. verzió Florida
2 Az adatbázis-kezelés relációs modellje: 2. verzió Texas
3 MySQL adatbázis-tervezés és optimalizálás kezdete Texas

Mivel ez a táblaszerkezet egy összetett elsődleges kulcsból áll, nem tartalmaz semmilyen nem kulcs attribútumot, és már szerepel a BCNF-ben (és ezért kielégíti az összes előző normál formát is). Ha azonban feltételezzük, hogy az összes rendelkezésre álló könyvet az egyes területeken kínálják, akkor észrevehetjük, hogy a cím nincs egyértelműen kötve egy bizonyos helyhez, ezért a táblázat nem felel meg a 4NF-nek.

Ez azt jelenti, a negyedik normál forma kielégítéséhez ezt a táblázatot is le kell bontani:

Franchise-vevő – könyv
Franchise-azonosító cím
1 MySQL adatbázis tervezés és optimalizálás kezdete
1 Relációs modell az adatbázis-kezeléshez: 2. verzió
2 MySQL adatbázis-tervezés és optimalizálás kezdete
2 Az adatbázis-kezelés relációs modellje: 2. verzió
3 MySQL adatbázis-tervezés és optimalizálás kezdete
Franchise-vevő – Hely
Franchise-vevő azonosítója Hely
1 Kalifornia
1 Florida
1 Texas
2 Kalifornia
2 Florida
2 Texas
3 Texas

Most minden rekordot egy szuperkulcs egyértelműen azonosít, ezért a 4NF meg van elégedve. h3>

Tegyük fel, hogy a franchise-osok különféle beszállítóktól is rendelhetnek könyveket. A relációra a következő korlátozás is vonatkozhat:

  • Ha egy bizonyos szállító bizonyos címet ad meg
  • és a címet a franchise-vevő kapja meg
  • és a franchise-vevőt a szállító látja el,
  • akkor a szállító eljuttatja a jogt a franchise-vevőhöz.
Beszállító – Könyv – Franchise-vevő
Szállítói azonosító cím Franchise-azonosító
1 MySQL adatbázis tervezés és optimalizálás kezdete 1
2 Az adatbázis-kezelés relációs modellje: 2. verzió 2
3 SQL megtanulása 3

Ez a táblázat 4NF formátumban található, de a Szállítóazonosító megegyezik a vetületeinek összekapcsolásával: {{{Szállítói azonosító, könyv}, {Könyv, Franchise-azonosító}, {Franchise-azonosító, szállító ID}}.Ennek a csatlakozási függőségnek egyetlen összetevője sem szuperkulcs (az egyetlen szuperkulcs a teljes fejléc), ezért a táblázat nem felel meg az ETNF-nek, és tovább bontható: div id = “035d43819b”>

Beszállító – Könyv
Szállítóazonosító Cím
1 MySQL adatbázis tervezés és optimalizálás kezdete
2 Az adatbázis-kezelés relációs modellje: 2. verzió
3 SQL tanulása
Könyv – Franchise-vevő
Title Franchise-azonosító
MySQL adatbázis-tervezés és optimalizálás kezdete 1
Az adatbázis-kezelés relációs modellje: 2. verzió 2
SQL tanulása 3
Franchise – beszállító
Beszállítói azonosító Franchise-vevő azonosító
1 1
2 2
3 3

A bontás előidézi az ETNF megfelelőségét.

Az 5NFEdit kielégítése

Az 5NF-nek nem megfelelő tábla észleléséhez általában az adatok alapos megvizsgálásához szükséges. Tegyük fel, hogy a 4NF példa táblázata az adatok kis módosításával, és vizsgáljuk meg, kielégíti-e az 5NF-et:

Franchise-vevő – Book Location
Franchise-azonosító Cím Hely
1 MySQL adatbázis-tervezés és optimalizálás kezdete Kalifornia
1 SQL megtanulása Kalifornia
1 Az adatbázis-kezelés relációs modellje: 2. verzió Texas
2 Az adatbázis-kezelés relációs modellje: 2. verzió Kalifornia

Ha lebontjuk ezt a táblázatot, csökkentjük az elbocsátásokat, és a következő két táblázatot kapjuk:

Franchise-vevő – könyv
Franchise-azonosító Title
1 MySQL adatbázis-tervezés és optimalizálás kezdete
1 SQL tanulása
1 Az adatbázis-kezelés relációs modellje: 2. verzió
2 Az adatbázis-kezelés relációs modellje: 2. verzió
Franchise-vevő – Hely
Franchise-vevő azonosítója Hely
1 Kalifornia
1 Texas
2 Kalifornia

Mi történik, ha megpróbálunk csatlakozni ezekhez a táblákhoz? A lekérdezés a következő adatokat adja vissza:

Franchise-vevő – Könyv – Hely JOINed
Franchise-azonosító Cím Hely
1 MySQL adatbázistervezés kezdete és Optimalizálás Kalifornia
1 SQL tanulása Kalifornia
1 Az adatbázis-kezelés relációs modellje: 2. verzió Kalifornia
1 Az adatbázis-kezelés relációs modellje: 2. verzió Texas
1 SQL tanulása Texas
1 MySQL adatbázis-tervezés és optimalizálás kezdete Texas
2 Az adatbázis-kezelés relációs modellje: 2. verzió Kalifornia

Nyilvánvaló, hogy a JOIN három további sort ad vissza, mint kellene – próbáljuk meg hozzáadni az anót táblázat a kapcsolat tisztázására.Három különálló táblázat jön létre:

Franchise-vevő – Könyv
Franchise-azonosító Cím
1 MySQL adatbázis-tervezés és optimalizálás kezdete
1 SQL tanulása
1 Az adatbázis-kezelés relációs modellje: 2. verzió
2 Az adatbázis-kezelés relációs modellje: 2. verzió
Franchise – Hely
Franchise-azonosító Hely
1 Kalifornia
1 Texas
2 Kalifornia
Hely – Boo k
Hely Cím
Kalifornia MySQL adatbázis tervezés és optimalizálás kezdete
Kalifornia SQL tanulása
Kalifornia Az adatbázis-kezelés relációs modellje: 2. verzió
Texas Az adatbázis-kezelés relációs modellje: 2. verzió

Mit jelent most a JOIN? Valójában nem lehet csatlakozni ehhez a három asztalhoz. Ez azt jelenti, hogy a Franchise-vevő és a könyv helyét nem lehetett bontani adatvesztés nélkül, ezért a táblázat már kielégíti az 5NF-et.

A CJ Date azzal érvelt, hogy az 5NF-ben csak egy adatbázis valóban “normalizált”.

A DKNFEdit kielégítése

Vessünk egy pillantást az előző példák Book táblájára, és nézzük meg, hogy kielégíti-e a tartománykulcs normál formáját:

Logikailag a vastagságot az oldalak száma határozza meg. Ez azt jelenti, hogy a Pages-től függ, ami nem kulcs. Vegyünk példát arra, hogy egy 350 oldalig terjedő könyvet “vékonynak”, a 350 oldalnál pedig “vastagnak” tekintünk.

Ez a megállapodás technikailag korlát, de nem is domain sem kulcsfontosságú kényszer, ezért nem támaszkodhatunk tartományi korlátokra és kulcsfontosságú korlátozásokra az adatok integritásának megőrzése érdekében.

Más szavakkal – semmi sem akadályozza meg, hogy például “Vastag” -t csak olyan könyvre tegyünk, ahol csak 50 oldal – és ettől a tábla megsérti a DKNF-et.

Ennek megoldására létrehozhatunk egy táblát tartalmazó felsorolást, amely meghatározza a vastagságot, és eltávolíthatjuk azt az oszlopot az eredeti táblából:

Könyv
Cím Oldalak Vastagság Műfajazonosító Kiadói azonosító
MySQL adatbázis tervezés és optimalizálás kezdete 520 Vastag 1 1
Az adatbázis-kezelés relációs modellje: 2. verzió 538 Vastag 2 2
SQL tanulása 338 Karcsú 1 3
SQL szakácskönyv 636 Vastag 1 3
Vastagsági felsorolás
Vastagság Min. Oldal Maximális oldal
Karcsú 1 350
Vastag 351 999 999 999 999 9999
Könyv – Oldalak – Műfaj – Kiadó
Cím Oldalak Műfajazonosító Kiadói azonosító
MySQL adatbázis tervezés és optimalizálás kezdete 520 1 1
A relációs modell Adatbázis-kezelés: 2. verzió 538 2 2
SQL tanulása 338 1 3
SQL szakácskönyv 636 1 3

Így kiküszöbölték a tartomány integritásának megsértését, és a táblázat DKNF-ben található.

A 6NFEdit kielégítése

A hatodik normál forma egyszerű és intuitív meghatározása az, hogy “egy tábla 6NF-ben van, amikor a sor tartalmazza az elsődleges kulcsot, és legfeljebb egy másik attribútumot”.

Ez azt jelenti, hogy például az 1NF létrehozása során megtervezett Publisher táblázat

Publisher
Publisher_ID Név Ország
1 Apress USA

tovább kell két táblára bomlik:

Kiadó
Publisher_ID Név
1 Nyomja le
Kiadó országa
Publisher_ID Ország
1 USA

A 6NF nyilvánvaló hátránya, hogy az egy entitás információinak megjelenítéséhez szükséges táblázatok sokasága van. Ha egy 5NF-ben lévő táblának egy elsődleges kulcsoszlopa és N attribútuma van, akkor ugyanazt az információt a 6NF-ben képviselve N táblára van szükség; egyetlen fogalmi rekord több mezõs frissítéséhez több tábla frissítése szükséges; és a beszúrások és törlések hasonlóan több tábla közötti műveleteket igényelnek. Ezért az online tranzakciófeldolgozási igényeket kiszolgáló adatbázisokban a 6NF-et nem szabad használni.

Azonban olyan adattárházakban, amelyek nem engedélyezik az interaktív frissítéseket, és amelyek nagy adatkötetek gyors lekérdezésére specializálódtak. , bizonyos DBMS-ek belső 6NF reprezentációt használnak – oszlopos adattároló néven. Azokban a helyzetekben, amikor az oszlop egyedi értékeinek száma jóval kevesebb, mint a táblázat sorainak száma, az oszlop-orientált tárolás jelentős helymegtakarítást tesz lehetővé az adatok tömörítésével. Az oszlopos tárolás lehetővé teszi a tartomány lekérdezések gyors végrehajtását (pl. Mutasson meg minden rekordot, ahol egy adott oszlop X és Y között van, vagy kevesebb, mint X.)

Mindezekben az esetekben azonban az adatbázis-tervező nem manuálisan kell végrehajtani a 6NF normalizálást külön táblák létrehozásával. Egyes, a raktározásra szakosodott DBMS-k, például a Sybase IQ, alapértelmezés szerint oszlopos tárolást használnak, de a tervező továbbra is csak egyetlen többoszlopos táblázatot lát. Más DBMS-ek, például a Microsoft SQL Server 2012 és újabb, lehetővé teszik az “oszlopok tárolójának indexét” egy adott tábla megadásához.

Write a Comment

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük