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:
- Ma'lumotlar bazasi allaqachon 1NF va 2NF talablariga javob berishi kerak.
- Barcha ma'lumotlar bazasi ustunlari birlamchi kalitga bog'liq bo'lishi kerak, ya'ni har qanday ustunning qiymati faqat birlamchi kalitdan olinishi mumkin.
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:
- EmployeeID
- Ism
- Familiya
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:
- Vehicle ID
- Ishlab chiqaruvchi
- Model
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:
- Vehicle ID
- Ishlab chiqaruvchi
- ModelID
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.
- ModelID
- Ishlab chiqaruvchi
- Model
3NF modelidagi olingan joylar
Jadvalda boshlanadigan maydon bo'lishi mumkin - bu jadvaldagi boshqa ustunlarga asoslangan hisoblangan. Masalan, ushbu vidjet buyruqlar jadvalini ko'rib chiqing:
- Buyurtma raqami
- Xaridor raqami
- Donasining narxi
- Miqdor
- Jami
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 jamiKeling, quyidagi so'rovlardan foydalanishimiz mumkin:
SELECT BuyurtmaNumber, UnitPrice * Miqdor AS dan widgetOrders dannormalizatsiya qoidalarini buzmasdan bir xil natijalarga erishish.