Երրորդ հերթական ձեւը (3NF) տվյալների շտեմարանի սկզբունքն է, որն ապահովում է տվյալների ամբողջականությունը, հիմնելով առաջին բնականոն ձեւը (1NF) եւ երկրորդ բնական ձեւը (2NF) տրամադրած տվյալների բազայի կարգավորումը :
Երրորդ հերթական ձեւային պահանջները
Տվյալների բազայի երկու հիմնական պահանջները, որոնք պետք է լինեն երրորդ հերթական ձեւով.
- Տվյալների բազան արդեն իսկ պետք է համապատասխանի թե 1NF եւ 2NF- ի պահանջներին:
- Բոլոր բազայի սյունակները պետք է կախված լինեն առաջնային բանալին , այսինքն, ցանկացած սյունակի արժեքը կարող է բխել միայն առաջնային բանալիից:
Հիմնական բանալին կախվածության մասին
Եկեք ուսումնասիրենք այն, ինչ նկատի ունենք այն փաստով, որ բոլոր սյուները պետք է կախված լինեն առաջնային բանալին:
Եթե սյունակի արժեքը կարող է բխում է թե առաջնային բանալիից, թե սեղանի մյուս սյունակից, այն խախտում է 3NF- ը: Հաշվի առեք աշխատողների սեղանը այս սյունակներով.
- EmployeeID- ը
- Անուն
- Ազգանուն
Արդյոք Անունն ու անունը կախված են միայն EmployeeID- ի արժեքից: Դե, կարող էր LastName կախված Անունից: Ոչ, քանի որ LastName- ին բնորոշ ոչինչ չի կարող առաջարկել Անունը: Կարող է Անունը կախված է LastName- ից: Ոչ մի անգամ, քանի որ նույնն է ճշմարիտ. Ինչ էլ լինի LastName- ը, այն չի կարող ակնարկ տալ Անունի արժեքի վերաբերյալ: Հետեւաբար, այս աղյուսակը 3NF- ին համապատասխանում է:
Բայց համարեք այս տրանսպորտային սեղան:
- VehicleID- ը
- Արտադրող
- Մոդել
Արտադրողը եւ մոդելը կարող են առաջանալ VehicleID- ից, սակայն մոդելը կարող է նաեւ արտադրել Արտադրողի կողմից, քանի որ տրանսպորտային միջոցը կատարում է միայն որոշակի արտադրողի կողմից: Այս սեղանի դիզայնը ոչ 3NF- ով է, եւ, հետեւաբար, կարող է հանգեցնել տվյալների անոմալիաների: Օրինակ, դուք կարող եք թարմացնել արտադրողին, առանց մոդելի թարմացման, անճշտությունների ներմուծման:
Համապատասխանեցնելու համար մենք պետք է տեղափոխենք լրացուցիչ կախված սյունը մեկ այլ աղյուսակ եւ հղում այն օտար բանալու: Դա հանգեցնի երկու աղյուսակների.
Տրանսպորտային աղյուսակ
Ստորեւ բերված աղյուսակում ModelID- ը մոդելների աղյուսակի արտաքին բանալի է.
- VehicleID- ը
- Արտադրող
- ModelID- ը
Մոդելների աղյուսակ
Այս նոր աղյուսակը քարտեզների մոդելներ արտադրողների համար: Եթե ցանկանում եք թարմացնել մոդելի հատուկ մեքենայի մասին տեղեկությունները, ապա դա արեցիք այս աղյուսակում, այլ ոչ թե Տրանսպորտային աղյուսակում:
- ModelID- ը
- Արտադրող
- Մոդել
3NF մոդելի մեջ ստացվող դաշտերը
Սեղան կարող է պարունակել ստացված դաշտ, մեկը, որը հաշվարկվում է սեղանի մյուս սյունակներում: Օրինակ, հաշվի առեք պատուհանների պատվերների այս աղյուսակը.
- Պատվերի ՀԱՄԱՐ
- Հաճախորդի համարը
- Միավոր գինը
- Քանակ
- Ընդամենը
Ընդհանուր ընդմիջումները 3NF- ի համապատասխանությունը, քանի որ այն կարելի է ձեռք բերել `միավորի գինը քանակի բազմապատկելով, այլ ոչ թե լիովին կախված առաջնային բանալինից: Մենք պետք է հեռացնենք այն սեղանից, որպեսզի համապատասխանի երրորդ հերթական ձեւը:
Փաստորեն, քանի որ այն բխում է, ավելի լավ է այն պահել այն տվյալների բազայում:
Տվյալների բազայի հարցումները կատարելու ժամանակ մենք կարող ենք պարզապես հաշվարկել այն «թռչելիս»: Օրինակ, մենք կարող էինք նախկինում օգտագործել այս հարցումը, որպեսզի ստացվի կարգի համարներ եւ հանրագումարներ:
SELECT OrderNumber, ընդամենը WidgetOrders- իցԱյժմ կարող ենք օգտագործել հետեւյալ հարցումները.
SELECT OrderNumber, UnitPrice * Քանակը AS Ընդամենը Ընդամենը WidgetOrdersնույն արդյունքներին հասնելու համար, առանց կանոնների խախտման: