Antroji normalioji forma (2NF) — duomenų bazių normalizavimo apibrėžimas
Sužinokite Antrosios normaliosios formos (2NF) principus: kaip normalizuoti duomenų bazes, užtikrinti priklausomybes nuo viso pirminio rakto ir išvengti duomenų pertekliaus.
Antroji normalioji forma (2NF) yra reliacinio modelio, konkrečiai lentelių, savybė, kuri yra duomenų bazių normalizavimo kriterijus. Ji taikoma tam, kad sumažintų duomenų pasikartojimą ir pašalintų vadinamas dalines priklausomybes, kurios sukelia atnaujinimo, įterpimo ir ištrynimo anomalijas.
Pirmasis antrosios normaliosios formos kriterijus - lentelė turi būti pirmosios normaliosios formos. Antrasis — kiekvienas neklustinis (non-key) stulpelis lentelėje turi visiškai priklausyti nuo viso eilutės pirminio rakto, o ne tik nuo jo dalies.
Kas yra dalinė priklausomybė?
Dalinė priklausomybė atsiranda, kai lentelės pirminis raktas yra sudarytas iš kelių stulpelių (t. y. kompozitinis raktas), o kai kurių ne-raktinių stulpelių reikšmės priklauso tik nuo vienos šio kompozitinio rakto sudedamosios dalies, o ne nuo viso rakto. Tokiu atveju tie stulpeliai turi būti perkelti į atskirą lentelę.
Kada 2NF taikoma automaticiškai?
Jei lentelės pirminis raktas yra vienas stulpelis (ne kompozitinis), tuomet, esant 1NF, lentelė jau bus ir 2NF, nes negali būti dalinių priklausomybių nuo „rakto dalies“.
Kodėl svarbu pereiti į 2NF?
- Mazina duomenų pasikartojimą, taip taupant vietą ir sumažinant neatitikimų tikimybę.
- Pašalina anomalijas:
- Atnaujinimo anomalija — reikia keisti tas pačias reikšmes keliose vietose.
- Įterpimo anomalija — negalite įterpti naujo įrašo be nereikalingos papildomos informacijos.
- Ištrynimo anomalija — ištrynus įrašą galite netyčia prarasti svarbią susijusią informaciją.
- Palengvina duomenų valdymą ir integritetą per atskirų lentelių ryšius.
Kaip perkelti lentelę į 2NF — žingsniai
- Nustatykite, ar pirminis raktas yra kompozitinis (sudarytas iš kelių stulpelių).
- Identifikuokite ne-raktinius stulpelius, kurie priklauso tik nuo rakto dalies (dalinės priklausomybės).
- Sukurkite naujas lenteles, kuriose talpinate tas priklausančias atributų grupes kartu su atitinkama rakto dalimi kaip pirminiu ar užsienio raktu.
- Palikite originalioje lentelėje tik tas savybes, kurios priklauso nuo viso kompozitinio rakto.
- Užtikrinkite ryšius (užsienos raktus) tarp naujų lentelių, kad būtų išsaugotas duomenų integralumas.
Pavyzdys
Tarkime turime lentelę Registracija su stulpeliais:
- StudentasID
- KursasID
- StudentoVardas
- KursoPavadinimas
- Pazymys
Čia pirminis raktas yra kompozitinis (StudentasID, KursasID). Tačiau StudentoVardas priklauso tik nuo StudentasID, o KursoPavadinimas — tik nuo KursasID. Tai yra dalinės priklausomybės ir jos pažeidžia 2NF.
Dezkompozicija į 2NF:
- Studentai(StudentasID, StudentoVardas)
- Kursai(KursasID, KursoPavadinimas)
- Registracija(StudentasID, KursasID, Pazymys) — čia pirminis raktas lieka (StudentasID, KursasID) ir visi ne-raktiniai atributai (čia tik Pazymys) priklauso nuo viso rakto.
Santykis su kitomis normaliosiomis formomis
- 1NF apibrėžia pagrindinius reikalavimus (pvz., atomines reikšmes). 2NF užkerta kelią dalinėms priklausomybėms.
- 3NF sprendžia transityvias priklausomybes (kai ne-raktinis stulpelis priklauso nuo kito ne-raktinio stulpelio). Taigi 2NF yra tarp 1NF ir 3NF: pirmiausia pašaliname dalines priklausomybes, vėliau — transityvias.
Pastabos ir kompromisai
- Normalizavimas iki 2NF paprastai pagerina duomenų vientisumą, bet gali padidinti užklausų skaičių (daugiau jungčių).
- Praktikoje kartais renkamasi dalinai denormalizuoti tam tikrus duomenis dėl našumo priežasčių, bet tai turi būti daroma suvokiant rizikas ir užtikrinant sinchronizaciją.
Apibendrinant: antroji normalioji forma reikalauja, kad lentelė būtų pirma normalioji forma ir neturėtų dalinių priklausomybių — visi ne-raktiniai atributai turi priklausyti nuo viso (o ne tik dalies) pirminio rakto. Stulpeliai, nesusiję su kiekvienu pirminio rakto stulpeliu, turi būti perkelti į atskiras lenteles; išlaikomi tik tie stulpeliai, kurie susiję su visais pirminio rakto stulpeliais.
Ieškoti