Tietokannan asettaminen kolmanteen normaalimuotoon (3NF)
Kolmas normaalimuoto (3NF) on tietokantaperiaate, joka tukee tietojen eheyttä rakentamalla tietokannan normalisoinnin periaatteet toimittamat ensimmäinen normaalimuoto (1NF) ja toinen normaalimuoto (2NF). 3NF: n tarkoitus on parantaa tietokannan käsittelyä ja samalla minimoida tallennuskustannukset.
Kolmannen normaalin lomakkeen vaatimukset
Tietokannan 3NF-muodossa on kaksi perusvaatimusta:
- Tietokannan on täytettävä sekä 1NF- että 2NF-vaatimukset.
- Kaikkien tietokannan sarakkeiden on oltava riippuvaisia pääavain, mikä tarkoittaa, että minkä tahansa sarakkeen arvo voidaan johtaa vain ensisijaisesta avaimesta.
Ensisijainen avaimen riippuvuus
Tutkitaan tarkemmin, mitä tarkoitamme sillä, että kaikkien sarakkeiden on oltava riippuvaisia ensisijaisesta avaimesta. Jos sarakkeen arvo voidaan johtaa sekä ensisijaisesta avaimesta että toisesta taulukon sarakkeesta, se rikkoo 3NF: ää. Harkitse työntekijöiden taulukkoa, jossa on seuraavat sarakkeet:
- Henkilöstökortti
- Etunimi
- Sukunimi
Riippuvatko sekä sukunimi että etunimi vain työntekijätunnuksen arvosta? Voiko sukunimi riippua etunimestä? Ei, koska mikään sukunimeen luontainen osa ei viittaa etunimen arvoon.
Voisiko etunimi riippua sukunimestä? Ei enää, koska sama pätee: mikä tahansa sukunimi saattaisikaan olla, se ei voinut antaa vihjettä etunimen arvosta. Siksi tämä taulukko on 3NF-yhteensopiva.
Harkitse sitten tätä ajoneuvotaulukkoa:
- VehicleID
- Valmistaja
- Malli
Valmistaja ja malli voivat olla peräisin VehicleID: stä, mutta malli voi myös olla peräisin valmistajasta, koska vain yksi tietty valmistaja valmistaa ajoneuvomallin. Tämä taulukkorakenne ei ole 3NF-yhteensopiva ja voi siksi aiheuttaa tietojen poikkeavuuksia. Voit esimerkiksi päivittää valmistajan päivittämättä mallia, mikä aiheuttaa epätarkkuuksia.
Tietokannan asettaminen kolmanteen normaalimuotoon (3NF)
Siirrä lisäriippuvainen sarake toiseen taulukkoon ja viittaa siihen käyttämällä a vieras avain tekisi siitä yhteensopivan. Tämä johtaisi kahteen taulukkoon, joita kutsumme nimellä "ajoneuvot" ja "mallit".
Ajoneuvot-taulukossa ModelID on vierasavain Mallit-taulukolle:
- VehicleID
- Valmistaja
- Mallin ID
Uusi Mallit-taulukko kartoittaa mallit valmistajien mukaan. Jos haluat päivittää mallikohtaisia ajoneuvotietoja, tee se tässä taulukossa "Ajoneuvot"-taulukon sijaan.
- Mallin ID
- Valmistaja
- Malli
Johdetut kentät 3NF-mallissa
Taulukko voi sisältää johdetun kentän, joka on laskettu taulukon muiden sarakkeiden perusteella. Harkitse esimerkiksi tätä widget-järjestystaulukkoa:
- Tilausnumero
- Asiakasnumero
- Yksikköhinta
- Määrä
- Kaikki yhteensä
Yhteensä rikkoo 3NF-yhteensopivuuden, koska se voidaan johtaa kertomalla yksikköhinta määrällä sen sijaan, että se olisi täysin riippuvainen ensisijaisesta avaimesta. Sinun on poistettava Total taulukosta noudattaaksesi kolmatta normaalia muotoa.
Koska se on johdettu, on parempi olla tallentamatta sitä tietokantaan ollenkaan, vaan yksinkertaisesti laskea se lennossa, kun sen sijaan suoritetaan tietokantakyselyitä. Olemme esimerkiksi saaneet aiemmin käyttää tätä kyselyä tilausnumeroiden ja loppusumman noutamiseen:
VALITSE tilausnumero, yhteensä
FROM WidgetOrders
Käytä nyt seuraavaa kyselyä saadaksesi samat tulokset rikkomatta normalisointisääntöjä:
SELECT Tilausnumero, Yksikköhinta * Määrä AS Yhteensä
FROM WidgetOrders