Ma'lumotlar bazasini uchinchi an'anaviy shaklda qo'yish (3NF)

Uchinchi an'anaviy shakl (3NF) - Birinchi Oddiy Form (1NF) va Ikkinchi Oddiy Form (2NF) tomonidan taqdim etilgan ma'lumotlar bazasi me'yorlari asoslari asosida ma'lumotlar yaxlitligini qo'llab-quvvatlaydigan ma'lumotlar bazasi tamoyili.

Uchinchi Oddiy formasi talablari

Ma'lumotlar bazasi uchun uchta an'anaviy shaklda bo'lish uchun ikkita asosiy talab mavjud:

Asosiy kalitlarga bog'liqlik haqida

Keling, barcha ustunlar birlamchi kalitga bog'liq bo'lishi kerakligini anglataylik.

Agar ustunning qiymati, asosiy kalit va jadvaldagi boshqa ustunlardan olinishi mumkin bo'lsa, u 3NFni buzadi. Ushbu ustunlar bilan xodimlar jadvalini ko'rib chiqing:

Both LastName va FirstName nafaqat EmployeeID qiymatiga bog'liqmi? Xo'sh, familiyasi BirinchiNamega bog'liq bo'lishi mumkinmi? Yo'q, chunki LastName-ga xos hech narsa nomning qiymatini bildirmaydi. BirinchiNameName LastNamega bog'liqmi? Hechqisi yo'q, chunki xuddi shu narsa to'g'ridir: biror LastName nima bo'lishidan qat'i nazar, bu birinchi ismning qiymatiga ishora qilolmaydi. Shuning uchun, bu jadval 3NF muvofiq.

Ammo, bu Avtomobillar jadvalini ko'rib chiqing:

Ishlab chiqaruvchi va modeli VehicleID-dan chiqarilishi mumkin, ammo modeli ishlab chiqaruvchidan ham chiqarilishi mumkin, chunki avtomobil modelini faqat ma'lum bir ishlab chiqaruvchi ishlab chiqaradi. Ushbu jadval dizayni 3NFga mos kelmaydi va shuning uchun ma'lumotlar anomaliyalariga olib kelishi mumkin. Misol uchun, siz ishlab chiqaruvchini modellashtirishni yangilamasdan yangilashingiz, noto'g'ri ma'lumotni kiritishingiz mumkin.

Bunga mos kelish uchun, biz boshqa qo'shimcha ustunni boshqa jadvalga ko'chirishimiz va chet el kalitini qo'llashimiz kerak. Bu ikki jadvalga olib keladi:

Avtomobillar jadvali

Quyidagi jadvalda ModelID Modellar jadvalidagi tashqi kalit:

Modelllar jadvali

Ushbu yangi jadvallar ishlab chiqaruvchilarga mo'ljallangan. Agar modelga xos har qanday avtomobil ma'lumotlarini yangilashni istasangiz, siz bu jadvalda emas, balki "Avtomobillar" jadvalida ishlaydi.

3NF modelidagi olingan joylar

Jadvalda boshlanadigan maydon bo'lishi mumkin - bu jadvaldagi boshqa ustunlarga asoslangan hisoblangan. Masalan, ushbu vidjet buyruqlar jadvalini ko'rib chiqing:

Jami mol-mulk 3NF muvofiqligi, chunki uni birlamchi kalitga to'liq bog'li bo'lish o'rniga, birlik narxini miqdori bilan ko'paytirish yo'li bilan olish mumkin. Uchinchi an'anaviy shaklga mos kelish uchun uni stoldan olib tashlashimiz kerak.

Darhaqiqat, u olinganligi uchun ma'lumotlar bazasida saqlamaslik yaxshiroqdir.

Ma'lumotlar bazasi so'rovlarini bajarishda uni "tezda" hisoblashimiz mumkin. Misol uchun, avval ushbu so'rovni buyurtma raqamlari va jamuljamlikni olish uchun ishlatgan bo'lishimiz mumkin:

SELECT BuyurtmaNumber, VidgetOrdersdan jami

Keling, quyidagi so'rovlardan foydalanishimiz mumkin:

SELECT BuyurtmaNumber, UnitPrice * Miqdor AS dan widgetOrders dan

normalizatsiya qoidalarini buzmasdan bir xil natijalarga erishish.