Tredde normale foarm (3NF) is in databankprinsipe dy't de yntegraasje fan gegevens stipet troch it bouwen fan 'e basis- basisynstellingsprinsipes dy't troch First Normal Form (1NF) en Second Normal Form (2NF) levere wurde.
Tredde normale folsleine easken
Der binne twa basisfoarsjennings foar in databank yn 'e tredde normale foarm:
- De databank moat al registrearje oan de easken fan sawol 1NF en 2NF .
- Alle databankspalten moatte ôfhinklik fan 'e primêre kaai wêze , dat betsjuttet dat alle wearde fan' e kolom allinich út it primêre kaai ûntliend wurde kin.
Oer de Primary Key Dependence
Litte wy fierder ûndersykje wat wy betsjutte troch it feit dat alle kolommen hingje moatte fan 'e primêre kaai.
As in kolom's wearde ôfkomt wurde kin fan sawol de primêre kaai en in oare kolom yn 'e tabel, it oanjaan fan 3NF. Besjogge in meiwurkers tabel mei dizze kolommen:
- EmployeeID
- Foarnamme
- Achternamme
Doge beide LastName en FirstName allinich ôf fan de wearde fan EmployeeID? No, kin LastName fan FirstName ôfhinne? Nee, om't neat yn LastName yngeande soe de wearde fan FirstName oanbiede. Koe it earsteName ôfhinkje fan LastName? No wer, om't itselde wier is: wat in LastName wêze kin, koe it net in hint jaan as de wearde fan FirstName. Dêrom is dizze tabel 3NF konform.
Mar sjogge dit tabelbalke:
- VehicleID
- Fabrikant
- Model
De fabrikant en it model kinne ôflaat fan 'e VehicleID - mar it model koe ek fan' e fabrikant ôflaaie, om't in fytsmodel allinich troch in bepaalde fabrikant makke is. Dit tabelûntwerp is net-3NF konform, en koe dêrom resultaten foar data-anomalies. Bygelyks, jo kinne de fabrikant fernije sûnder it modell te aktualisearje, yntrodearjen fan ûnjildingen.
Om it konform te meitsjen, moatte wy de oanfoljende ôfsûnderlike kolom ferpleatse nei in oare tabel en referearje it mei in bûtenlânske kaai. Dit soe ta twa tafels komme:
Vehikel Tafel
Yn 'e tabel hjirûnder is de ModelID in frjemde toetseboerd foar de modeletabel:
- VehicleID
- Fabrikant
- ModelID
Models Tafel
Dizze nije tabel leit modellen foar fabrikanten. As jo in karakterynformaasje spesifyk nei in model aktualisearje wolle, dan wolle jo dit yn dizze tabel dwaan, dan net yn 'e tabellen fan' e Vehikel.
- ModelID
- Fabrikant
- Model
Derived Fields yn it 3NF Model
In tabel kin in ôflaat fjild befetsje - ien dat berekkent wurdt basearre op oare kolommen yn 't tafel. Sjoch bygelyks dizze tabel fan widgetopsjes:
- Bestelnûmer
- Customer Number
- Unit Priis
- Kwantiteit
- Totaal
De totale brekken oer 3NF oerienkomst om't it kin wurde troch it multiplikearjen fan de ienheidpriis troch de kwantiteit, yn stee fan it folslein ôfhinklik fan de primêre kaai. Wy moatte it fan 'e tafel fuortsmite om de tredde normale foarm oan te foljen.
Yn 't feit, om't it ôflaat is, is it better om dat net hielendal yn' e database te bewarjen.
Wy kinne gewoan it "op 'e flier" skriuwe by it útfieren fan database queries. Sa kinne wy bygelyks dizze query earder brûke om bestellingsnûmers en totalen werom te heljen:
SELECT OrderNumber, Totaal FROM WidgetOrdersWy kinne no de folgjende fraach brûke:
SELEKT OrderNumber, UnitPrice * Quantity AS Totaal FROM WidgetOrdersom deselde resultaten te realisearjen sûnder de normalisearringsregels te lijen.