Skip to main content

Tietokannan muuntaminen kolmanneksi normaaliksi lomakkeeksi (3NF)

Star Trek 25th Anniversary Ep 3 Loves Labor Jeopardized Walkthrough (Saattaa 2024)

Star Trek 25th Anniversary Ep 3 Loves Labor Jeopardized Walkthrough (Saattaa 2024)
Anonim

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 ulkomaalainen avain mallit pöytä:

  • 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 WidgetOrders

Voimme nyt käyttää seuraavaa kyselyä:

SELECT Tilausnumero, yksikköhinta * Määrä AS Total FROM WidgetOrders

jotta saataisiin samat tulokset rikkomatta normalisointisääntöjä.