Ներկայացնել տվյալների բազան երրորդ հերթական ձեւաչափով (3NF)

Երրորդ հերթական ձեւը (3NF) տվյալների շտեմարանի սկզբունքն է, որն ապահովում է տվյալների ամբողջականությունը, հիմնելով առաջին բնականոն ձեւը (1NF) եւ երկրորդ բնական ձեւը (2NF) տրամադրած տվյալների բազայի կարգավորումը :

Երրորդ հերթական ձեւային պահանջները

Տվյալների բազայի երկու հիմնական պահանջները, որոնք պետք է լինեն երրորդ հերթական ձեւով.

Հիմնական բանալին կախվածության մասին

Եկեք ուսումնասիրենք այն, ինչ նկատի ունենք այն փաստով, որ բոլոր սյուները պետք է կախված լինեն առաջնային բանալին:

Եթե ​​սյունակի արժեքը կարող է բխում է թե առաջնային բանալիից, թե սեղանի մյուս սյունակից, այն խախտում է 3NF- ը: Հաշվի առեք աշխատողների սեղանը այս սյունակներով.

Արդյոք Անունն ու անունը կախված են միայն EmployeeID- ի արժեքից: Դե, կարող էր LastName կախված Անունից: Ոչ, քանի որ LastName- ին բնորոշ ոչինչ չի կարող առաջարկել Անունը: Կարող է Անունը կախված է LastName- ից: Ոչ մի անգամ, քանի որ նույնն է ճշմարիտ. Ինչ էլ լինի LastName- ը, այն չի կարող ակնարկ տալ Անունի արժեքի վերաբերյալ: Հետեւաբար, այս աղյուսակը 3NF- ին համապատասխանում է:

Բայց համարեք այս տրանսպորտային սեղան:

Արտադրողը եւ մոդելը կարող են առաջանալ VehicleID- ից, սակայն մոդելը կարող է նաեւ արտադրել Արտադրողի կողմից, քանի որ տրանսպորտային միջոցը կատարում է միայն որոշակի արտադրողի կողմից: Այս սեղանի դիզայնը ոչ 3NF- ով է, եւ, հետեւաբար, կարող է հանգեցնել տվյալների անոմալիաների: Օրինակ, դուք կարող եք թարմացնել արտադրողին, առանց մոդելի թարմացման, անճշտությունների ներմուծման:

Համապատասխանեցնելու համար մենք պետք է տեղափոխենք լրացուցիչ կախված սյունը մեկ այլ աղյուսակ եւ հղում այն ​​օտար բանալու: Դա հանգեցնի երկու աղյուսակների.

Տրանսպորտային աղյուսակ

Ստորեւ բերված աղյուսակում ModelID- ը մոդելների աղյուսակի արտաքին բանալի է.

Մոդելների աղյուսակ

Այս նոր աղյուսակը քարտեզների մոդելներ արտադրողների համար: Եթե ​​ցանկանում եք թարմացնել մոդելի հատուկ մեքենայի մասին տեղեկությունները, ապա դա արեցիք այս աղյուսակում, այլ ոչ թե Տրանսպորտային աղյուսակում:

3NF մոդելի մեջ ստացվող դաշտերը

Սեղան կարող է պարունակել ստացված դաշտ, մեկը, որը հաշվարկվում է սեղանի մյուս սյունակներում: Օրինակ, հաշվի առեք պատուհանների պատվերների այս աղյուսակը.

Ընդհանուր ընդմիջումները 3NF- ի համապատասխանությունը, քանի որ այն կարելի է ձեռք բերել `միավորի գինը քանակի բազմապատկելով, այլ ոչ թե լիովին կախված առաջնային բանալինից: Մենք պետք է հեռացնենք այն սեղանից, որպեսզի համապատասխանի երրորդ հերթական ձեւը:

Փաստորեն, քանի որ այն բխում է, ավելի լավ է այն պահել այն տվյալների բազայում:

Տվյալների բազայի հարցումները կատարելու ժամանակ մենք կարող ենք պարզապես հաշվարկել այն «թռչելիս»: Օրինակ, մենք կարող էինք նախկինում օգտագործել այս հարցումը, որպեսզի ստացվի կարգի համարներ եւ հանրագումարներ:

SELECT OrderNumber, ընդամենը WidgetOrders- ից

Այժմ կարող ենք օգտագործել հետեւյալ հարցումները.

SELECT OrderNumber, UnitPrice * Քանակը AS Ընդամենը Ընդամենը WidgetOrders

նույն արդյունքներին հասնելու համար, առանց կանոնների խախտման: