Database Normalization
Database Normalization
Database Normalization ဆိုတာ ဘာလဲ?
Database Design မကောင်းရင် Data တူတာတွေ ထပ်နေမယ်၊ Update လုပ်တဲ့အခါ Data မကိုက်ညီတော့တာမျိုးတွေ ဖြစ်နိုင်ပါတယ်။ ဥပမာ Customer ရဲ့ Phone Number တစ်ခု ပြောင်းသွားတဲ့အခါ Table ထဲမှာ Record အများကြီးရှိနေရင် တစ်နေရာပြင်ပြီး တစ်နေရာမပြင်မိတာမျိုး ဖြစ်နိုင်ပါတယ်။ ဒီလို Data Duplication နဲ့ Data Inconsistency ပြဿနာတွေကို လျှော့ချဖို့ Database Normalization ကို အသုံးပြုပါတယ်။
Database Normalization ဆိုတာ Database Table တွေကို စနစ်တကျ ခွဲထုတ်ပြီး Data တစ်ခုကို တစ်နေရာတည်းမှာပဲ သိမ်းဆည်းနိုင်အောင် Design လုပ်တဲ့ Process ဖြစ်ပါတယ်။
Data Duplication ဆိုတာ ဘာလဲ?
Data Duplication ဆိုတာ Data တစ်ခုတည်းကို Table ထဲမှာ နေရာအများကြီးမှာ ထပ်ခါထပ်ခါ သိမ်းထားတာကို ဆိုလိုပါတယ်။
ဥပမာ Order Table တစ်ခုမှာ Customer Information ကို Order တိုင်းနဲ့အတူ သိမ်းထားတယ်ဆိုပါစို့။
| Order ID | Customer | Phone | Product |
|---|---|---|---|
| 1 | Aung Aung | 091111111 | Laptop |
| 2 | Aung Aung | 091111111 | Mouse |
| 3 | Aung Aung | 091111111 | Keyboard |
Customer တစ်ယောက်က Order သုံးခု တင်ရင် Phone Number လည်း သုံးခါထပ်သိမ်းထားရပါတယ်။ ဒီလို Data တွေ ထပ်နေတဲ့အတွက် Storage ပိုကုန်သလို Update လုပ်တဲ့အခါ Error ဖြစ်နိုင်ခြေလည်း ပိုများလာပါတယ်။
Data Duplication က ဘာပြဿနာ ဖြစ်စေလဲ?
Data Duplication ဟာ Storage ပိုကုန်တာထက် ပိုကြီးတဲ့ ပြဿနာက Data မကိုက်ညီတော့တာပါ။
ဥပမာ Customer ရဲ့ Phone Number က 091111111 ကနေ 099999999 ပြောင်းသွားတယ်ဆိုပါစို့။ Order Record သုံးခုရှိတဲ့အနက် နှစ်ခုကိုပဲ Update လုပ်ပြီး တစ်ခုကျန်ခဲ့ရင် Database ထဲမှာ Customer တစ်ယောက်အတွက် Phone Number နှစ်မျိုး ဖြစ်နေပါလိမ့်မယ်။
ဒီလို ဖြစ်တာကို Update Anomaly လို့ ခေါ်ပါတယ်။ အလားတူ Data Delete လုပ်လိုက်လို့ လိုအပ်တဲ့ Information ပါ ပျောက်သွားတာကို Delete Anomaly၊ Record အသစ် ထည့်လို့မရတာကို Insert Anomaly လို့ ခေါ်ပါတယ်။
First Normal Form (1NF)
First Normal Form (1NF) ရဲ့ အဓိက Rule ကတော့ Column တစ်ခုထဲမှာ Value တစ်ခုတည်းပဲ ရှိရပါမယ်။
ဥပမာ User တစ်ယောက်ရဲ့ Phone Number နှစ်ခုကို ဒီလို သိမ်းထားတာမျိုးဟာ 1NF မဖြစ်ပါဘူး။
| User | Phone |
|---|---|
| Aung Aung | 091111111, 099999999 |
အဲ့ဒီအစား Row နှစ်ခုခွဲပြီး သိမ်းရပါမယ်။
| User | Phone |
|---|---|
| Aung Aung | 091111111 |
| Aung Aung | 099999999 |
ဒီလိုလုပ်ခြင်းအားဖြင့် Query ရေးရတာလည်း ပိုလွယ်ကူလာပြီး Database Structure က ပိုစနစ်ကျလာပါတယ်။
Second Normal Form (2NF)
Second Normal Form (2NF) ကတော့ Table ထဲမှာရှိတဲ့ Data အားလုံးဟာ Primary Key တစ်ခုလုံးအပေါ်မှာပဲ မှီခိုရပါမယ်။
ဥပမာ Student နဲ့ Subject ကို တွဲထားတဲ့ Table မှာ Student Name ကို Row တိုင်းမှာ ထပ်သိမ်းထားတယ်ဆိုပါစို့။
| Student ID | Subject | Student Name |
|---|---|---|
| 1 | Math | Aung Aung |
| 1 | English | Aung Aung |
Student Name က Subject ပေါ်မှာ မမှီပါဘူး။ Student ID ပေါ်မှာပဲ မူတည်ပါတယ်။ ဒါကြောင့် Student Information ကို သီးခြား Table ထုတ်ထားတာ ပိုကောင်းပါတယ်။
Third Normal Form (3NF)
Third Normal Form (3NF) ကတော့ Non-key Column တစ်ခုဟာ တခြား Non-key Column ကို မမှီခိုရပါဘူး။
ဥပမာ Employee Table မှာ Department Name ကို Employee တိုင်းနဲ့အတူ သိမ်းထားတယ်ဆိုပါစို့။
| Employee | Department ID | Department Name |
|---|---|---|
| Aung Aung | 1 | IT |
| Su Su | 1 | IT |
Department Name က Employee နဲ့ မဆိုင်ဘဲ Department ID ပေါ်မှာပဲ မူတည်ပါတယ်။ ဒါကြောင့် Department Table ကို သီးခြားထားပြီး Foreign Key နဲ့ ချိတ်ဆက်တာဟာ 3NF Design ဖြစ်ပါတယ်။
Real Database Example
E-commerce Website တစ်ခုကို စဉ်းစားကြည့်ပါ။
Normalization မလုပ်ထားရင် Order Table ထဲမှာ Customer Name၊ Phone၊ Address၊ Product Name စတဲ့ Information တွေကို Order တိုင်းမှာ ထပ်သိမ်းထားရပါမယ်။
| Order | Customer | Phone | Address | Product |
|---|---|---|---|---|
| 1 | Aung Aung | 091111111 | Yangon | Laptop |
| 2 | Aung Aung | 091111111 | Yangon | Mouse |
ဒီလို Structure အစား Database ကို Table အများကြီး ခွဲထားနိုင်ပါတယ်။
customersordersproductsorder_items
Order Table ထဲမှာတော့ Customer ID ကိုပဲ သိမ်းထားပြီး လိုအပ်တဲ့အချိန်မှာ JOIN နဲ့ Data တွေကို ပြန်ယူနိုင်ပါတယ်။
SELECT
o.id,
c.name,
p.name
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN order_items oi ON oi.order_id = o.id
JOIN products p ON oi.product_id = p.id;
ဒီလို Design လုပ်ထားရင် Customer ရဲ့ Phone Number ပြောင်းသွားတဲ့အခါ customers Table တစ်ခုတည်းကို Update လုပ်ရုံနဲ့ Order အားလုံးမှာ Data အသစ်ကို ရရှိနိုင်ပါတယ်။
Denormalization ဆိုတာ ဘာလဲ?
Normalization က Data Duplication ကို လျှော့ချပေးပေမယ့် Query တစ်ခု Run တိုင်း Table အများကြီးကို JOIN လုပ်ရတဲ့အတွက် Performance ထိခိုက်နိုင်ပါတယ်။
ဒီလိုအခြေအနေမျိုးမှာ Performance ကို ဦးစားပေးဖို့ Data တချို့ကို ရည်ရွယ်ချက်ရှိရှိ ထပ်သိမ်းတာကို Denormalization လို့ ခေါ်ပါတယ်။
ဥပမာ Reporting Dashboard တစ်ခုမှာ Customer Name ကို အမြဲ JOIN လုပ်နေရမယ့်အစား Order Table ထဲမှာ Customer Name ကိုပါ သိမ်းထားနိုင်ပါတယ်။ Storage ပိုကုန်ပေမယ့် Report Query တွေ ပိုမြန်လာနိုင်ပါတယ်။
Normalization က အမြဲတမ်း အကောင်းဆုံးလား?
မဟုတ်ပါဘူး။ Application အများစုမှာ 3NF အထိ Normalize လုပ်ထားတာက လုံလောက်ပါတယ်။ ဒါပေမယ့် Performance Requirement မြင့်လာတဲ့အခါ Read Performance ကို တိုးမြှင့်ဖို့ Denormalization ကိုလည်း တွဲသုံးတတ်ကြပါတယ်။
Database Design ကတော့ "Normalization လား၊ Denormalization လား" ဆိုတာထက် Application ရဲ့ Query Pattern၊ Traffic နဲ့ Business Requirement အပေါ် မူတည်ပြီး ရွေးချယ်ရတာ ဖြစ်ပါတယ်။
အကျဉ်းချုပ်အားဖြင့် Database Normalization ဆိုတာ Data Duplication ကို လျှော့ချပြီး Database ကို ပိုမိုစနစ်ကျအောင် Design လုပ်တဲ့ နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။ 1NF၊ 2NF နဲ့ 3NF ကို နားလည်ထားခြင်းအားဖြင့် Data Inconsistency ပြဿနာတွေကို ရှောင်ရှားနိုင်ပြီး Database Maintenance ကိုလည်း ပိုမိုလွယ်ကူစေပါတယ်။ ဒါပေမယ့် Production System တွေမှာတော့ Performance Requirement ပေါ်မူတည်ပြီး Denormalization ကိုလည်း လိုအပ်သလို အသုံးပြုကြပါတယ်။
Related Posts
Database Transactions
ACID, Commit/Rollback နဲ့ Isolation Levels - Backend Developer တိုင်းသိထားရမည့် Database Transaction Fundamentals
July 26, 2026
Go အခြေခံများ
Go ရဲ့ အခြေခံ syntax မှ concurrency အထိ - high-performance backend applications တည်ဆောက်ဖို့ လိုအပ်တဲ့ အရာအားလုံး
January 1, 2026
Go Basics: A Beginner's Guide to Golang
From basic syntax to goroutines and channels - everything you need to build scalable backend systems with Go
January 1, 2026