Forma e tretë e zakonshme (3NF) është një parim i bazës së të dhënave që mbështet integritetin e të dhënave duke u bazuar në parimet e normalizimit të bazës së të dhënave të ofruara nga Formati i Parë Normal (1NF) dhe Forma e Dytë Normal (2NF).
Kërkesat e zakonshme të formës së tretë
Ekzistojnë dy kërkesa themelore për një bazë të dhënash që të jetë në formën e tretë normale:
- Baza e të dhënave tashmë duhet të plotësojë kërkesat e 1NF dhe 2NF .
- Të gjitha kolonat e bazës së të dhënave duhet të varen nga çelësi kryesor , që do të thotë se vlera e çdo kolone mund të rrjedhë vetëm nga çelësi primar.
Rreth varësisë kryesore primare
Le të shqyrtojmë më tej atë që nënkuptojmë me faktin se të gjitha kolonat duhet të varen nga çelësi kryesor.
Nëse vlera e një kolone mund të rrjedhë nga dy çelësi primar dhe një kolonë tjetër në tabelë, ai shkel 3NF. Konsideroni një tabelë të Punonjësve me këto kolona:
- EmployeeID
- Emri
- Mbiemri
A do të dyja Emri dhe Emri i parë varen vetëm nga vlera e EmployeeID? E pra, a mund të varet Emri i Fundit nga Emri i parë? Jo, sepse asgjë e pandarë në LastName do të sugjeronte vlerën e FirstName. Emri i FirstName mund të varet nga Emri i Fundit? Jo më shumë, sepse e njëjta gjë është e vërtetë: cilido që mund të jetë Emri i fundit, nuk mund të japë një aluzion për vlerën e FirstName. Prandaj, kjo tabelë është në përputhje me 3NF.
Por e konsideroni këtë tabelë të automjeteve:
- VehicleID
- prodhues
- model
Prodhuesi dhe Modeli mund të rrjedhin nga ID-ja e Automjetit - por Modeli mund të rrjedh nga Prodhuesi, sepse një model i automjetit është bërë vetëm nga një prodhues i caktuar. Kjo dizajn tavoline nuk përputhet me 3NF dhe mund të rezultojë në anomali të të dhënave. Për shembull, mund ta përditësoni prodhuesin pa e përditësuar modelin, duke futur pasaktësi.
Për ta bërë atë në përputhje, ne do të duhet të lëvizim kolonën e varur shtesë në një tabelë tjetër dhe ta referojmë atë duke përdorur një çelës të huaj. Kjo do të rezultojë në dy tabela:
Tabela e automjeteve
Në tabelën më poshtë, ModelID është një çelës i jashtëm në tabelën e modeleve :
- VehicleID
- prodhues
- ModelID
Tabela e modeleve
Kjo tabelë e re i harton modele prodhuesve. Nëse dëshironi të përditësoni çdo informacion të automjetit të veçantë për një model, do ta bëni atë në këtë tabelë, në vend të tabelës së Automjeteve.
- ModelID
- prodhues
- model
Fushat e Derivuara në Modelin 3NF
Një tabelë mund të përmbajë një fushë të nxjerrë - një që llogaritet në bazë të kolonave të tjerë në tabelë. Për shembull, e konsideroni këtë tabelë të porosive widget:
- Numri i porosisë
- Numri i konsumatorëve
- Çmimi i njësisë
- sasi
- Total
Totali thyen pajtueshmërinë 3NF sepse mund të nxirret duke shumëzuar çmimin e njësisë sipas sasisë, në vend që të jetë plotësisht i varur nga çelësi kryesor. Ne duhet ta heqim atë nga tryeza për t'u përputhur me formën e tretë normale.
Në fakt, meqë është nxjerrë, është më mirë të mos e ruash fare në bazën e të dhënave.
Ne thjesht mund ta llogarisim atë "në lëvizje" kur kryejmë kërkesa në bazën e të dhënave. Për shembull, mund të përdorim më parë këtë pyetje për të rifituar numrat e porosive dhe totalet:
SELECT RenditNumber, Totali nga WidgetOrdersTani mund të përdorim pyetjen e mëposhtme:
SELECT RenditNumber, UnitPrice * Sasia AS Totali nga WidgetOrderspër të arritur rezultate të njëjta pa shkelur rregullat e normalizimit.