Database Normalization ဆိုတာဘာလဲ

ကျနော်တို့တွေ ခုနောက်ပိုင်းနည်းပညာတော်တော်များများမှာ Data ဆိုတာ မပါမဖြစ်ပါလာကြပီ website ပဲရေးရေး ဘာပဲလုပ်လုပ် project တော်တော်များများမှာ Database တွေကို သုံးလာကြတယ်။
အဲ့လိုမျိုး Database တွေနဲ့ အလုပ် လုပ်တဲ့အခါမှာ ကျနော်တို့တွေ Database တွေကို Design လုပ်ကြရတယ်။ Logically အရ data management တွေလုပ်ကြရတယ် table တေ column တေ သတ်မှတ်ပီး အလုပ်လုပ်ကြရတယ်။ 
ခုပို့စ်မှာ ကျနော် Normalization ကို အဓိကထားပြောမှာဖြစ်လို့ Database အခြေခံတေကိုတော့မပြောတော့ဘူး။ Database အခြေခံကို နောက်မှ သက်သက်တင်ပေးပါမယ်။ 

အဲ့တော့ Normalization ဆိုတာ Database Design Technique တစ်ခုပဲဖြစ်တယ်။ တစ်ခါတစ်လေမှာ Data တွေက မလိုအပ်ဘဲ ဖောင်းပွနေတာတို့ ထပ်ခါထပ်ခါ ဖြစ်နေတာတို့ ရှိတယ်။ အဲ့လို ပုံမှန်မဟုတ်တဲ့အခြေအနေမှာ ကျနော်တို့တွေက logically processes တွေလုပ်ရတာ နဲနဲတိုင်ပတ်လာတယ်။ အဲ့ဒါကြောင့် ကျနော်တို့က Data Redundancy ကိုလျှော့ချဖို့ နဲ့ Data တွေကို logically stored လုပ်နိုင်ဖို့ Normalization ကို သုံးကြတယ်။ 

နောက်ပီး database ကို normalization လုပ်မထားဘူးဆိုရင် ကြုံရနိုင်တဲ့ anomaly(မူမမှန်ချက်)တွေရှိပါတယ်။ အဓိကက data ကို insert ၊ update ၊ delete လုပ်တဲ့အခါမှာ မူမမှန်ချက်တွေရှိလာတာပါ။ တကယ်တော့ read တဲ့အပိုင်းမှာလဲ လိုချင်တဲ့ information ရဖို့ handle လုပ်ရတာတိုင်ပတ်လာပါတယ်။

အဲ့တော့ read နဲ့ ပက်သက်တဲ့ တိုင်ပတ်တာကို အရင်ပြောရအောင်။ ကျနော် ဥပမာ နဲ့ ရှင်းပြပါမယ်။
Database တစ်ခုရှိမယ် အဲ့Database ထဲမှာ အောက်ကအတိုင်း Table_1 ဆိုတဲ့ table တခုရှိတယ်  
Table_1

ကျနော်တို့က Mystery အမျိုးအစား Movie ကို ပြချင်တယ်ဆိုရင် query ကို ဒီလိုရေးရမယ်

SELECT MovieName 
FROM Table_1 
WHERE Genre1 = ‘Mystery’ OR
      Genre2 = ‘Mystery’ OR
      Genre3 = ‘Mystery’;

ခုအခြေအနေမှာရှိနေတဲ့ movie တိုင်းက Genre 3ခုပဲ ရှိနေလို့ OR ခံရေးရတာ အဆင်ပြေနေသေးတယ်။ ဒါပေမယ့် နောက် movie အသစ်တစ်ခုထပ်ထည့်လိုက်လို့ အဲ့movie က genre 4 ခုဖြစ်နေရင် တိုင်ပတ်ပီပဲ။ Database တွေကို Design လုပ်မယ်ဆိုရင် အတတ်နိုင်ဆုံး ရေရှည်ဖြစ်လာမှာတေကိုလဲ ကြိုတွက်ရတယ်၊ ကိုယ့်ရဲ့ client ကထပ်ပီး တောင်းဆိုလာရင်လဲ ပြင်ရလွယ်အောင်လုပ်ရမယ်။ တကယ်က ခုနဥပမာ Table မှာ နှစ်နေရာ တိုင်ပတ်မယ်။ အသစ်တိုးလာတိုင်း Table_1 ကို column ထပ်ပီးတိုးနေရမယ်။ query မှာလဲ ထပ်ပီးတိုးရေးနေရမယ်။ ဘယ်လိုမှ အဆင်မပြေဘူး။ အာ့ကြောင့် ကျနော်တို့ Table_1 ဆိုတာကြီးကို Table_1 and Table_2 ဆိုပီး အောက်ပါအတိုင်းခွဲလိုက်မယ်။ Table_1 Table_2 အာ့ဆိုအဆင်ပြေပီ။ တိုင်မပတ်တော့ဘူး။ လွယ်လွယ်ပြောရရင် Normalization လုပ်တာက table အကြီးတွေကို table အသေးလေးတွေအဖြစ် ခွဲပစ်တာပဲ။ Database တွေမှာ တချို့ table တွေက အရမ်းဖောင်းပွပီးကြီးနေတယ် ၊ အဲ့တော့ table အချင်းချင်း relationship လုပ်ရတာတိုင်ပတ်လာတယ်။ Database Normalization လုပ်တဲ့အခါမှာ Rules တွေရှိပါတယ်။ Rule က Normal Form ဖြစ်ဖို့ပဲ။ Normal Form 6 မျိုးရှိတယ်။ ယေဘုယျအားဖြင့်ကတော့ 3 Normal Form လောက်ထိဆို အဆင်ပြေကြတာများတယ်။ • 1NF (First Normal Form) • 2NF (Second Normal Form) • 3NF (Third Normal Form) • BCNF (Boyce-Codd Normal Form) • 4NF (Fourth Normal Form) • 5NF (Fifth Normal Form) • 6NF (Sixth Normal Form) သွားတဲ့ flow ကတော့ ရှိနေတဲ့ Table ကို 1st Normal Form နဲ့ကိုက်ညီအောင် ပြောင်းတယ်ခွဲတယ်။ ပြေပီဆိုထားလိုက်အိုကေပီ။ မပြေသေးရင် နောက်ဆုံးအရိုးရှင်းဆုံးထိ နောက် Form တွေကို တခုပီးတခုပြောင်းသွားရမှာ။ ကျနော်အပေါ်မှာ ပြောခဲ့တဲ့ Movie table ဥပမာ က 1NF ပုံစံကို ပြောင်းပီး ဖြေရှင်းလိုက်တာ။ 1NF ရဲ့ rule က • Table ရဲ့ column တစ်ခုစီတိုင်းရဲ့ name တေက unique ဖြစ်ရမယ် • values တေက atomic ဖြစ်ရမယ် ၊ ဆိုလိုတာက columnရဲ့ cell တခုမှာ single value ဖြစ်ရမယ် • column တွေက မထပ်ရဘူး။ အပေါ်က ဥပမာမှာဆို တခုထဲရှိတဲ့ Table_1 မှာ Genre1, Genre2 လိုမျိုးတွေ မထားရဘူး။ • cell တခုမှာ value တခုပဲရှိရမယ်။ ဆိုလိုတာက column တစ်ခုထဲတော့ဖြစ်ပါရဲ့ ဒါပေမယ့် cellတစ်ခုထဲမှာ multiple values တေကို comma (,) ခံ ပြီးတော့ မရေးသင့်ဘူး။ ဒါကတော့ 1NF ရဲ့ rule တွေပဲဖြစ်ပါတယ်။ ကဲအခုတော့ ဒီမှာပဲ ခဏနားလိုက်မယ် နောက်ရက်တွေမှာ ဆက်ပြီးတင်ပေးပါဦးမယ်။ ‌‌