Kolmas normaali lomake (3NF) on tietokannan periaate, joka tukee tietojen eheyttä rakentamalla ensimmäisen Normal Form (1NF) ja Second Normal Form (2NF) -standardin normalisointiperiaatteita.
Kolmas tavanomainen vaatimuslomake
Tietokannassa on kaksi perusvaatimusta, jotka ovat kolmannessa normaalissa muodossa:
- Tietokannan on täytettävä sekä 1NF: n että 2NF: n vaatimukset .
- Kaikkien tietokantasarakkeiden on oltava riippuvaisia ensisijaisesta avaimesta , mikä tarkoittaa, että minkä tahansa sarakkeen arvo voidaan johtaa vain ensisijaisesta avaimesta.
Tietoja ensisijaisesta avaintekijästä
Tutkitaan entisestään, mitä tarkoitamme sillä, että kaikkien sarakkeiden on oltava riippuvaisia ensisijaisesta avaimesta.
Jos sarakkeen arvo voidaan johtaa sekä ensisijaisesta avaimesta että taulukon toisesta sarakkeesta, se rikkoo 3NF. Harkitse Työntekijät-taulukon näiden sarakkeiden avulla:
- Henkilöstökortti
- Etunimi
- Sukunimi
Onko sekä viimeinen nimi että etunimi riippuisi vain EmployeeID: n arvosta? Voisiko LastName riippua FirstName: stä? Ei, koska mikään lasteen ominaisuuksista ei ehdota arvoa FirstName. Voisiko FirstName riippua viimeisestä nimestä? Ei uudestaan, koska sama pätee: mitä LastName saattaa olla, se ei voinut antaa vihjeitä FirstName-arvon arvosta. Siksi tämä taulukko on 3NF-yhteensopiva.
Mutta ajattele tätä Ajoneuvot-taulukkoa:
- VehicleID
- Valmistaja
- Malli
Valmistaja ja malli voisivat saada VehicleID: stä - mutta malli voisi myös tulla valmistajalta, koska ajoneuvomalli on vain valmistajan valmistaja. Tämä taulukkosuunnittelu ei ole yhteensopiva 3NF: n kanssa, ja se voi siten johtaa datan poikkeamiin. Voit esimerkiksi päivittää valmistajan päivittämättä mallia ja esittämällä epätarkkuuksia.
Jotta se olisi yhteensopiva, meidän olisi siirrettävä ylimääräinen riippuva sarake toiseen taulukkoon ja viitata se ulkomaisen avaimen avulla. Tämä johtaisi kahteen taulukkoon:
Ajoneuvot Taulukko
Alla olevassa taulukossa ModelID on mallipöydän vieraan avain:
- VehicleID
- Valmistaja
- ModelID
Mallit Taulukko
Tämä uusi taulukko malleja valmistajille. Jos haluat päivittää mallia koskevat ajoneuvotietosi, tee se tässä taulukossa eikä ajoneuvojen taulukossa.
- ModelID
- Valmistaja
- Malli
Johdotetut kentät 3NF-mallissa
Taulukko voi sisältää johdetun kentän - joka lasketaan taulukon muiden sarakkeiden perusteella. Katso esimerkiksi tämä widget-tilausten taulukko:
- Tilausnumero
- Asiakasnumero
- Yksikköhinta
- Määrä
- Kaikki yhteensä
Kokonaisuus rikkoo 3NF: n noudattamista, koska se voidaan johtaa kertomalla yksikköhinta määrällä sen sijaan, että se olisi täysin riippuvainen ensisijaisesta avaimesta. Meidän on poistettava se taulukosta, jotta voimme noudattaa kolmannen normaalin lomakkeen.
Itse asiassa, koska se on peräisin, on parempi olla tallentamatta tietokantaan ollenkaan.
Voimme yksinkertaisesti laskea sen "lennossa" suoritettaessa tietokantahakemuksia. Voimme esimerkiksi käyttää aiemmin tätä kyselyä saadaksesi tilausnumerot ja kokonaismäärät:
SELECT Tilausnumero, Yhteensä FROM WidgetOrdersVoimme nyt käyttää seuraavaa kyselyä:
SELECT Tilausnumero, yksikköhinta * Määrä AS Total FROM WidgetOrdersjotta saataisiin samat tulokset rikkomatta normalisointisääntöjä.