'N Databasis in Derde Normale Vorm (3NF) plaas

Derde normale vorm (3NF) is 'n databasisbeginsel wat die integriteit van data ondersteun deur te bou op die databasis normaliseringsbeginsels wat deur Eerste Normale Vorm (1NF) en Tweede Normale Vorm (2NF) verskaf word.

Derde Normale Vorm Vereistes

Daar is twee basiese vereistes vir 'n databasis om in die derde normale vorm te wees:

Oor die primêre sleutel afhanklikheid

Kom ons ondersoek verder wat ons bedoel met die feit dat alle kolomme afhang van die primêre sleutel.

As 'n kolom se waarde afgelei kan word van beide die primêre sleutel en 'n ander kolom in die tabel, oortree dit 3NF. Oorweeg 'n Werknemers tafel met hierdie kolomme:

Beide beide LastName en FirstName is slegs afhanklik van die waarde van EmployeeID? Wel, kan LastName van FirstName afhang? Nee, want niks inherent aan LastName stel die waarde van FirstName voor nie. Kan FirstName afhang van LastName? Nie meer nie, want dieselfde is waar: wat ookal 'n LastName mag wees, kan nie 'n wenk gee oor die waarde van die eerste naam nie. Daarom is hierdie tabel 3NF-voldoenbaar.

Maar beskou hierdie voertuig se tabel:

Die Vervaardiger en die Model kan afkomstig wees van die VoertuigID - maar die Model kan ook van die Vervaardiger afkomstig wees omdat 'n voertuigmodel slegs deur 'n bepaalde vervaardiger gemaak word. Hierdie tafel ontwerp is nie-3NF voldoen, en kan dus lei tot data-afwykings. Byvoorbeeld, jy kan die vervaardiger bywerk sonder om die model by te werk, om onakkuraathede in te stel.

Om dit in ooreenstemming te bring, sal ons die addisionele afhanklike kolom na 'n ander tabel moet skuif en verwys na 'n vreemde sleutel. Dit sal in twee tabelle lei:

Voertuie Tabel

In die onderstaande tabel is die ModelID 'n vreemde sleutel vir die Modelle tafel:

Modelle Tabel

Hierdie nuwe tabel kaarte modelle aan vervaardigers. As u enige voertuiginligting spesifiek vir 'n model wil opdateer, sal u dit in hierdie tabel doen, eerder as in die Voertuigtabel.

Afgeleide velde in die 3NF model

'N Tabel kan 'n afgeleide veld bevat - een wat bereken word op grond van ander kolomme in die tabel. Kyk byvoorbeeld na hierdie tabel van widget-bestellings:

Die totaal breek 3NF-nakoming omdat dit afgelei kan word deur die eenheidsprys met die hoeveelheid te vermenigvuldig, eerder as om heeltemal afhanklik van die primêre sleutel te wees. Ons moet dit van die tafel af verwyder om aan die derde normale vorm te voldoen.

Trouens, aangesien dit afgelei is, is dit beter om dit nie in die databasis te stoor nie.

Ons kan dit eenvoudig "op die vlieg" bereken wanneer databasisnavrae uitgevoer word. Byvoorbeeld, ons het voorheen hierdie navraag gebruik om bestelnommers en totale te verkry:

KIES Bestelnommer, Totaal VAN WidgetOrders

Ons kan nou die volgende navraag gebruik:

KIES Bestelnommer, Eenheidsprys * Hoeveelheid AS Totaal FROM WidgetOrders

Om dieselfde resultate te behaal sonder om normaalwegsreëls te oortree.