Database denormalization nima va qachon kerak? (3-qism)
Assalamu Alaykum biz oldingi maqolalarda database normalization va uning har xil formalarini ko'rib chiqdik bugun bunga qarshi bo'lgan database denormazation nimaligini ko'rib o'tamiz. Qani ketdik ;)
Tavsiya qilinadigan maqolalar ro'yxati :
Database normalization 1-qism.
Normalization Formalari 2- qism.
Bugungi maqolada :
Database denormalization nima ?
Database denormalization va normalization farqlari ?
Oldingi maqolalarda aytganimizdek normalization bizga database ma'lumotlar bir biriga qarshi bo'lib qolishidan saqlaydi.Shuning uchun har doim database uchun sxema tuzayotganda hamma jadvallar(table) normalization qoidalariga tushishi kerak shundaymi .Real proyektlarda har doim ham bunday bo'lavermaydi .Buni sabablarini maqola davomida bilib olamiz .
Biz odatda databasega qo'shiladigan ma'lumotni foydalanuvchidan olamiz ammo bazi holatlarda buni boshqa databasedan olishimiz ham mumkin .Bizning database tablelari bizga bog'liq ammo 2-database tablelari normallashtirilmagan bo'lsachi ?
1-sabab Tashqi faktorlar
Tassavur qiling bizda boshqa databasedan ma'lumot olyapsiz unda o'yinda sotib olingan narsalar haqida ma'lumot saqlangan xuddi pastdagi tableday

Bu yerda Unit price ya'ni mahsulot narxi saqlangan ammo bilganingizdek ko'p o'yinlarda u o'zgarib turadi va qaysi kun sotib olinganiga bog'liq bo'ladi bu yerda Date+Item_type => Unit price yani narx kun va narsa turiga bog'liq bo'lyapti bu 3NFga qarshi va keyinchalik bir xil mahsulot har xil narxda bo'lib qolishi databaseda mantiqan xatolikga olib keladi.
Biz tableni shu ko'rinishga olib kelishimiz zarur NF qoidalari bo'yicha ammo bunday qilolmaymiz chunki boshqa databaseda bular yoq (biz ma'lumot olayotgan databaseda.

Spoiler: Haqiqatda biz bunday qila olamiz script yozish orqali ammo bu ko'p resurs talab qiladi balkim bu holatda ham database yaxshi holatga kelmasligi mumkin.
Bu holatda denormalization qilishga tashqi faktorlar qarshi keldi buning sabablari odatda database migration yani database turlarini o'zgartirish yoki boshqa versiyaga o'tish sabab bo'lishi mumkin.
Xo'sh qani agarda bizga hech qanday tashqi faktorlar qarshi bo'lmasachi ?
Misol 1: Xuddi tepadagi misol bizda normallashtirilgan database sxema bor bunda bir kunda hamma bir xil mahsulot uchun bir xil narx to'laydi mabodo bunda o'zgarish bo'lsa masalan premium foydlanuvchilar arzonroq to'lasachi bu holatda normallashtirilgan table bizga yordam bermaydi va biz denormallashtirishga majbur bo'lamiz.
Misol 2: Bunga yana bir misol bo'lib Futbolchilarni o'yinlarda sotib olishni misol qilishimiz mumkin sizda rekordlarda eng qimmat sotib olingan futbolchi degan bo'lim bor ammo vaqt o'tib futbolchi narxi arzonlashdi ammo bu sizning rekordlaringizga tasir qilsmaligi kerak bu holatda rekordlarda faqat futbolchi idsi emas u bilan birga uning narxi ismi balki o'ynayotgan klubi ham yozib qo'yilishi yani dublikat qilinishi mumkin.
2-sabab Performance

Denormallashtirishga boshqa sabab bu performance yani qaysidir querylarni tezroq ishlashiga harakat qilish.
Tepadagi sxemada ko'rishingiz mumkin elektron magazinda buyurtmalarni tezroq olish va user yoki tijoratchi yoki kuriyerga ko'rsatish uchun hamma ma'lumotlar birlashtirilgan bu esa tablelar join qilingandagi vaqtdan yutiladi ammo databaseda ko'p joyni egallashi hamda keraksiz m'lumotlar ko'payishi ga yoki qayta qayta takrorlanish iga olib keladi.
Ha aytgancha table denormalized qilingandan so'ng ma'lumotlarni yangilash o'z o'zidan sekinlashadi (update).
Fikrimcha
O'ylashimcha biz nega normalizationni birinchi amalga oshirib keyin denormallashtiramiz.Fikrimcha bunga xotira sabab chunki ommaviy dasturlar yaratish boshlanganda xotira eng katta muammo bo'lgan va iloji boricha ixchamroq ma'lumot saqlab xotirdan kam joy olish asosiy maqsad bo'lgan hozirga kelib har xil cloudlar chiqishi va ularda xotira muammosi yo'qligi va bizdagi asosiy maqsad tezlikga ko'chgani ham sabab bo'lishi mumkin. (Balkim query ishlatishga ketayotgan vaqt narxi xotira narxidan qimmatroq bo'lib qolgandir ;).
Xulosa
Xulosa qilib aytadigan bo'lsa normalization databasega yozishni tezlashtiradi va databaseni ko'p tablelarga bo'ladi ammo databaseda o'qish joinlar evazga sekinlashadi , denormalizationda esa kam tableda ko'p ma'lumotlar saqlanadi va bu tez querylarga va bir paytda databasega malumot yozishni sekinlashishiga olib keladi.Shuning uchun u ko'p holatlarda databasedan ko'p ma'lumot olinadigan vaziyatlarda ishlatilinadi.
E'tiboringiz uchun rahmat !!!