Fomu ya tatu ya kawaida (3NF) ni kanuni ya database inayounga mkono uadilifu wa data kwa kujenga juu ya kanuni za usimamiaji wa database zinazotolewa na Fomu ya Kwanza ya kawaida (1NF) na Fomu ya Pili ya kawaida (2NF).
Mahitaji ya Fomu ya Tatu ya kawaida
Kuna mahitaji mawili ya msingi kwa database kuwa katika fomu ya tatu ya kawaida:
- Duka lazima lifanyie tayari mahitaji ya 1NF na 2NF .
- Nguzo zote za database zinategemea ufunguo wa msingi , na maana kwamba thamani yoyote ya safu inaweza kupatikana kutoka kwa ufunguo wa msingi tu.
Kuhusu Msingi wa Msingi wa Msingi
Hebu tutafakari zaidi kile tunachosema kwa ukweli kwamba nguzo zote zinategemea ufunguo wa msingi.
Ikiwa thamani ya safu inaweza kupatikana kutoka kwa ufunguo wote wa msingi na safu nyingine katika meza, inakiuka 3NF. Fikiria meza ya Waajiri na nguzo hizi:
- Waajiriwa
- Jina la kwanza
- Jina la familia
Je, jina la mwisho na jina la kwanza linategemea tu thamani ya Wafanyakazi? Naam, Je, Jina la Mwisho linategemea jina la kwanza? La, kwa sababu hakuna kitu kinachojulikana katika Jina la Mwisho kinaonyesha thamani ya Jina la Mwanzo. Je, jina la kwanza linategemea Jina la Mwisho? Hakuna tena, kwa sababu hiyo ni ya kweli: chochote Nambari ya Mwisho inaweza kuwa, haikuweza kutoa maelezo kama thamani ya Jina la Mwanzo. Kwa hiyo, meza hii ni 3NF inayokubaliana.
Lakini fikiria meza hii ya Magari:
- GariID
- Mtengenezaji
- Mfano
Mtengenezaji na Mfano wanaweza kupata kutoka kwa VehicleID - lakini Mfano pia unatokana na Mtengenezaji kwa sababu mtindo wa gari unafanywa tu na mtengenezaji fulani. Mpangilio wa jedwali hili sio la 3NF linalolingana, na kwa hiyo, linaweza kusababisha matokeo mabaya ya data. Kwa mfano, unaweza kuboresha mtengenezaji bila uppdatering mtindo, kuanzisha sahihi.
Ili kuifanya kuzingatia, tunahitaji kuhamisha safu ya ziada ya tegemezi kwenye meza nyingine na kuielezea kwa kutumia ufunguo wa kigeni. Hii ingeweza kusababisha meza mbili:
Magari Jedwali
Katika meza hapa chini, ModelID ni ufunguo wa kigeni kwenye meza ya Mifano :
- GariID
- Mtengenezaji
- Weka ModelID
Jedwali la Mifano
Mifumo hii mpya ya ramani ya meza kwa wazalishaji. Ikiwa unataka update maelezo yoyote ya gari maalum kwa mfano, utafanya hivyo katika meza hii, badala ya meza ya Magari.
- Weka ModelID
- Mtengenezaji
- Mfano
Mashamba yaliyoharibiwa katika Mfano wa 3NF
Jedwali linaweza kuwa na shamba inayotokana - moja iliyohesabiwa kulingana na nguzo zingine kwenye meza. Kwa mfano, fikiria meza hii ya maagizo ya widget:
- Idadi ya Nambari
- Nambari ya Wateja
- Bei ya Kitengo
- Wingi
- Jumla
Uvunjaji wa jumla wa 3NF kwa sababu inaweza kutekelezwa kwa kuzidisha bei ya kitengo kwa wingi, badala ya kutegemeana kikamilifu na ufunguo wa msingi. Lazima tuondoe kwenye meza ili tufuatie fomu ya kawaida ya tatu.
Kwa kweli, kwa kuwa imechukuliwa, ni vyema si kuihifadhi kwenye darasani kabisa.
Tunaweza kuihesabu tu "juu ya kuruka" wakati wa kufanya maswali ya msingi. Kwa mfano, tunaweza kutumia awali swali hili ili kupata nambari za utaratibu na jumla:
Chagua Nambari ya Nambari, Jumla kutoka kwa Wajaji wa WidgetSasa tunaweza kutumia swala lifuatayo:
Chagua Nambari ya Order, UnitPrice * Wingi AS Jumla kutoka kwa WidgetOrdersili kufikia matokeo sawa bila kukiuka sheria za kawaida.