Þriðja eðlilegt eyðublað (3NF) er gagnagrunnsregla sem styður heilleika gagna með því að byggja á meginreglum um stöðlun gagnagrunns sem First Normal Form (1NF) og Second Normal Form (2NF) veita.
Þriðja Venjulegt Form Kröfur
Það eru tveir grunnkröfur fyrir gagnagrunninn að vera í þriðja eðlilegu formi:
- Gagnagrunnurinn verður þegar að uppfylla kröfur bæði 1NF og 2NF .
- Allar dálkir gagnasafns verða að vera háð aðallyklinum , sem þýðir að aðeins hvaða dálkur er hægt að fá frá dálknum.
Um aðal lykilatriði
Við skulum kanna frekar hvað við áttum með því að allir dálkar verða að treysta á aðal lykilinn.
Ef gildi dálks er hægt að draga úr bæði aðallyklinum og annarri dálki í töflunni, brýtur það gegn 3NF. Íhugaðu starfsmannatöflu með þessum dálkum:
- Starfsmaður
- Fyrsta nafn
- Eftirnafn
Gera bæði LastName og FirstName aðeins háð gildi starfsmannaþjónustunnar? Jæja, gæti LastName verið háð FirstName? Nei, vegna þess að ekkert sem felst í LastName myndi stinga upp á gildi FirstName. Gæti FirstName verið háð LastName? Ekki aftur, því það sama er satt: hvað sem LastName gæti verið, gæti það ekki gefið vísbendingu um gildi FirstName. Þess vegna er þetta borð 3NF samhæft.
En íhuga þetta ökutæki borð:
- VehicleID
- Framleiðandi
- Líkan
Framleiðandinn og líkanið gætu leitt af ökutækinu - en líkanið gæti einnig leitt af framleiðanda vegna þess að gerð ökutækis er aðeins gerð af tiltekinni framleiðanda. Þessi borðhönnun er ekki í samræmi við 3NF og gæti því leitt til galla frávikum. Til dæmis gætirðu uppfært framleiðandann án þess að uppfæra líkanið og kynna ónákvæmni.
Til að gera það samhæft þurfum við að færa viðbótar háð dálkinn í aðra töflu og vísa til þess að nota erlenda lykil. Þetta myndi leiða til tveggja tafla:
Ökutæki Tafla
Í töflunni hér að neðan er ModelID er erlent lykill í líkanaborðinu:
- VehicleID
- Framleiðandi
- ModelID
Líkanatafla
Þessi nýja töflu kort líkan til framleiðenda. Ef þú vilt uppfæra allar upplýsingar um ökutæki sem eiga sér stað fyrir gerð, þá myndi þú gera það í þessum töflu, frekar en í ökutækjatöflunni.
- ModelID
- Framleiðandi
- Líkan
Afleiddar reitir í 3NF líkaninu
Tafla gæti innihaldið aflað reit - eitt sem er reiknað út frá öðrum dálkum í töflunni. Tökum dæmi um þessa töflu fyrir pöntunarpantanir:
- Pöntunarnúmer
- Númer viðskiptavinar
- Einingaverð
- Magn
- Samtals
Heildarkostnaður brýtur 3NF samræmi vegna þess að hægt er að fá það með því að margfalda einingaverðið með því að magnið, frekar en að vera að fullu háð aðalatriðinu. Við verðum að fjarlægja það úr borðið til að fara eftir þriðja eðlilegu formi.
Reyndar, þar sem það er aflað, er betra að ekki geyma það í gagnagrunninum yfirleitt.
Við getum einfaldlega reiknað það "í fljúgandi" við framkvæma gagnasafn fyrirspurnir. Til dæmis gætum við áður notað þessa fyrirspurn til að sækja númer og heildarfjölda:
SELECT OrderNumber, Samtals FROM WidgetOrdersVið getum nú notað eftirfarandi fyrirspurn:
SELECT OrderNumber, UnitPrice * Magn AS Samtals FROM WidgetOrderstil að ná sömu niðurstöðum án þess að brjóta reglur um venju.