Vendosja e një baze të dhënash në formën e tretë normale (3NF)

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:

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:

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:

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 :

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.

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:

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 WidgetOrders

Tani mund të përdorim pyetjen e mëposhtme:

SELECT RenditNumber, UnitPrice * Sasia AS Totali nga WidgetOrders

për të arritur rezultate të njëjta pa shkelur rregullat e normalizimit.