Chapter 8

Database Keys and Relationship

Database Keys

Database Normalization မလုပ်ခင်မှာ Database မှာ အသုံးပြုသည့် Key အခေါ်အဝေါ်တွေကို သိဖို့လိုပါတယ်။ ပထမဆုံး အောက်က Table ကို လေ့လာကြည့်ပါ။

Student Table

student_idnamephoneage
1Ba Oo0997655439818
2Aye Maung0979655311822
3Pyone Cho0950123142122
4Ko Oo095141232119

Super Key

Super Key ကတော့ column တစ်ခု သို့မဟုတ် တစ်ခု ထက်မက လည်း ဖြစ်နိုင်ပါတယ်။ Unique ဖြစ်သည့် column အမျိုးအစားပါ။

student_id , student_id + name , phone စတာတွေက key ပါပဲ။ age ကတော့ student ကို ကိုယ်စားမပြုနိုင်ပါဘူး။ student_id က student တစ်ယောက်တည်းကို ကိုယ်စားပြုနိုင်တယ်။ name က duplicate ဖြစ်နိုင်တယ်။ ဒါပေမယ့် student_id + name ဆိုပြီး column ၂ ခု ပေါင်းရင် student ကို ကိုယ်စားပြုနိုင်ပါတယ်။ phone လည်း အတူတူပါပဲ။

key တွေ အကုန်လုံးက super key လို့ ခေါ်ပါတယ်။

Candidate Key

  • Candidate Key က ဘယ်တော့မှ Null မဖြစ်ရဘူး သို့မဟုတ် Empty မဖြစ်ရပါဘူး။ unique (value မထပ်ခြင်း) ဖြစ်ရပါမယ်။
  • Table တစ်ခုမှာ တစ်ခုထက်မက candidate key ပါဝင်နိုင်ပါတယ်။
  • Candidate Key က Column တစ်ခု သို့မဟုတ် တစ်ခု ထက် မကလည်း ဖြစ်နိုင်ပါတယ်။

Student table မှာ ဆိုရင်တော့ student_id နှင့် phone က candidate key တွေဖြစ်ပါတယ်။

Primary Key

Primary key ကိုတော့ candidate key ထဲက ရွေးချယ်ပါတယ်။ student_id နှင့် phone မှာ ဆိုရင်တော့ Primary key အနေနဲ့က student_id ထားဖို့ သင့်တော်ပါတယ်။ phone number က ကျောင်းသားက ပြောင်းနိုင်ပေမယ့် student_id ကတော့ မပြောင်းပါဘူး။​ နောက်ပြီး primary key က database ကနေ auto increment လုပ်သွားပါတယ်။

Foreign Key

Foreign key ကတော့ table တစ်ခု နဲ့ တစ်ခု relationship အနေနဲ့ အသုံးပြုပါတယ်။

Foriegn Key ကို နားလည် အောင် နောက်ထပ် Branch table ထပ်ဖြည့်ပါမယ်။

Branch Table

branch_codebranch_nameHOD
CSComputer ScienceDaw Swe Swe
CTComputer TechnologyU Thein Maung

အခု Student Table မှာ branch ထပ်ဖြည့်ပါမယ်။

student_idnamephoneagebranch_code
1Ba Oo0997655439818CS
2Aye Maung0979655311822CS
3Pyone Cho0950123142122CT
4Ko Oo095141232119CT

အခုဆိုရင် branch_code က student table မှာ Foreign Key အနေဖြင့် ရှိပါတယ်။

Student Table မှာ Branch Table မှာ မရှိသည့် branch code ကို ထည့်ခွင့်မရှိပါဘူး။ Branch table မှာလည်း branch_code ကို ဖျက်လို့မရပါဘူး။ ဖျက်သည့် အခါမှာတော့ student table မှာ reference ရှိနေသည့် အတွက် error တက်လာပါမယ်။ Student table မှာ ဖျက်ချင်သည့် branch code ကို ပြင်ပြီးမှ ဖျက်လို့ရပါမယ်။

Composite Key

Key ဟာ column တစ်ခု ထက် ပိုပါနေသည့် key ကို Composite လို့ ခေါ်ပါတယ်။ Student table မှာ student_id + name နဲ့ composite key ဖြစ်ပါတယ်။

Compound Key

Composite Key ထဲက column တစ်ခုဟာ foreign key ဖြစ်ခဲ့ရင် compound key လို့ သတ်မှတ်ပါတယ်။

Student table မှာ ဆိုရင် student_id + branch_code ဟာ Compound key ဖြစ်ပါတယ်။

Surrogate Key

Surrogate Key ဆိုတာက primary key အနေနဲ့ အသုံးပြုထားပြီး အဓိက index နဲ့ search အတွက် အသုံးပြုဖို့ အတွက် ဖန်တီးထားသည့် key ပါ။ MySQL မှာဆိုရင်တော့ auto_increment အနေနဲ့ အသုံးပြုပါတယ်။ သီးသန့် သတ်မှတ်ထားတာ မဟုတ် ပဲ row တစ်ကြောင်းထည့်တိုင်း အလိုလို 1 တိုးသွားပါတယ်။

ဥပမာ

surrogate_keybranch_codebranch_nameHOD
1CSComputer ScienceDaw Swe Swe
2CTComputer TechnologyU Thein Maung