Skip to content
GitHub

Database Structure: Candidate Key

Keys ဆိုတာ Table တစ်ခုထဲမှာ အရေးကြီးတဲဲ့အခန်းကဏ္ဍတွေကနေ လုပ်ဆောင်ပေးတဲ့ special fields တွေဖြစ်ပြီး key အမျိုးအစားပေါ် မူတည်၍ လုပ်ဆောင်ချက်ကိုယ်စီရှိပါတယ်။ Keys တွေဟာ records တွေကို တစ်ခုစီ တိတိကျကျခွဲခြားရှာဖွေထုတ်ယူနိုင်ဖို့၊ table တွေအချင်းချင်း relationship တွေ တည်ဆောက်ဖို့နှင့် data မှန်ကန်တိကျမှု (data integrity) ရှိဖို့အတွက် အသုံးပြုတဲ့ field တစ်ခု (သို့မဟုတ်) field အစုအဝေး (set of fields) ဖြစ်ပါတယ်။

Candidate key က table ထဲမှာရှိတဲ့ record တစ်ကြောင်းချင်းစီကို တိတိကျကျခွဲခြားပေးနိုင်တဲ့ field တစ်ခု (သို့မဟုတ်) field အစုအဝေးတစ်ခု (set of fields) ဖြစ်ပါတယ်။ Candidate Key လို့ခေါ်ရတဲ့အကြောင်းရင်းကတော့ သူဟာ Primary Key ဖြစ်လာဖို့ “ကိုယ်စားလှယ်လောင်း” တစ်ယောက်လို အရည်အချင်းပြည့်မီနေလို့ပဲ ဖြစ်ပါတယ်။ Table တိုင်းမှာ အနည်းဆုံး Candidate Key တစ်ခုတော့ ရှိရပါမယ်။

Candidate Key ဖြစ်ရန် လိုအပ်သော စည်းမျဉ်းများ

Section titled “Candidate Key ဖြစ်ရန် လိုအပ်သော စည်းမျဉ်းများ”

Candidate Key တစ်ခုဖြစ်ဖို့ အောက်ပါစည်းမျဉ်းတွေအားလုံးနှင့် ကိုက်ညီရပါမယ်။

Candidate key က တန်ဖိုးတစ်ခုတည်းပဲ ရှိရမယ်။ (Atomic Value)

Section titled “Candidate key က တန်ဖိုးတစ်ခုတည်းပဲ ရှိရမယ်။ (Atomic Value)”

Field တစ်ခုထဲမှာ data နှစ်ခု သုံးခု ပေါင်းစပ်ထည့်ထားတာမျိုး (ဥပမာ- “123 Street, City, Country” လိုမျိုး FullAddress field) ဖြစ်လို့မရပါဘူး။ Candidate Key ဟာ တန်ဖိုးတစ်ခုတည်းကိုသာ ကိုယ်စားပြုရပါမယ်။

Candidate key တွင် unique တန်ဖိုးများသာ ပါဝင်ရပါမယ်။

Section titled “Candidate key တွင် unique တန်ဖိုးများသာ ပါဝင်ရပါမယ်။”

Candidate Key ရဲ့ တန်ဖိုးဟာ ထပ်နေလို့ မရပါဘူး။ Table ထဲက record တိုင်းအတွက် တစ်ခုနှင့်တစ်ခု လုံးဝမတူညီဘဲ unique ဖြစ််နေရပါမယ်။ ဒါမှ record တစ်ခုစီကို တိကျစွာ ခွဲခြားပေးနိုင်မှာပါ။

Candidate key တွင် NULL တန်ဖိုးများ ပါဝင်လို့ မရပါဘူး။

Section titled “Candidate key တွင် NULL တန်ဖိုးများ ပါဝင်လို့ မရပါဘူး။”

Candidate Key မှာပါဝင်တဲ့ ဘယ် field မှ unknown ဖြစ်နေလို့မရပါဘူး။ အမြဲတမ်း တိကျတဲ့ တန်ဖိုးတစ်ခုခု ရှိနေရပါမယ်။

Candidate key ဟာ Irreducible ဖြစ်ရပါမယ်။

Section titled “Candidate key ဟာ Irreducible ဖြစ်ရပါမယ်။”

Field နှစ်ခု သို့မဟုတ် နှစ်ခုထက်ပိုတဲ့ field တွေကိုပေါင်းပြီး Candidate Key အဖြစ် အသုံးပြုချင်တဲ့အခါ Candidate Key ကို ဖွဲ့စည်းထားတဲ့ field တွေထဲက ဘယ် field ကိုမှ ဖယ်ရှားလိုက်လို့မရပါဘူး။ ဖယ်ရှားလိုက်တာနှင့် အဲဒီအစုအဝေးဟာ unique မဖြစ်တော့ဘဲ Candidate Key မဟုတ်တော့ပါဘူး။

ဥပမာ - OrderDetails table တစ်ခု ရှိတယ်ဆိုပါစို့။
ဒီ table မှာ (OrderID, ProductID) ဆိုတဲ့ field နှစ်ခုကိုတွဲပြီး Candidate Key အဖြစ် သတ်မှတ်နိုင်ပါတယ်။

  • ဒီ (OrderID, ProductID) နှစ်ခုပေါင်းလိုက်မှသာ unique ဖြစ်ပါတယ်။
  • OrderID တစ်ခုတည်း unique မဖြစ်နိုင်ပါဘူး (ဘာလို့လဲဆိုတော့ order တစ်ခုတည်းမှာ product များစွာ ပါဝင်နိုင်လို့ပါ)။
  • ProductID တစ်ခုတည်း unique မဖြစ်နိုင်ပါဘူး (ဘာလို့လဲဆိုတော့ product တစ်ခုကို order များစွာ မှာယူနိုင်လို့ပါ)။
    ဒါကြောင့် (OrderID, ProductID) ဟာ လျှော့ချ၍မရနိုင်သော (irreducible) Candidate Key ဖြစ်ပါတယ်။ ဘယ်တစ်ခုကိုမှ ဖယ်ရှားလိုက်လို့မရပါဘူး။

Candidate Key ရဲ့ တန်ဖိုးက တည်ငြိမ်မှု (stability) ရှိရပါတယ်။

Section titled “Candidate Key ရဲ့ တန်ဖိုးက တည်ငြိမ်မှု (stability) ရှိရပါတယ်။”

Candidate Key တွေ (အထူးသဖြင့် Primary Key အဖြစ် ရွေးချယ်ခံရမယ့် Key တွေ) ရဲ့ တန်ဖိုးတွေဟာ ပြောင်းလဲမှုမရှိသင့်ပါဘူး။ တိကျခိုင်မာတဲ့ အကြောင်းပြချက်မရှိဘဲ Candidate Key ရဲ့ တန်ဖိုးကို ဘယ်တော့မှ မပြောင်းလဲသင့်ပါဘူး။ အကြောင်းရင်းကတော့ ဒီ Key ကို တခြား table တွေက Foreign Key အဖြစ် ကိုးကားထားနိုင်လို့ပါ။

Candidate Key တန်ဖိုးကို ပြောင်းလိုက်ရင် ဒီ Key ကို Foreign Key အဖြစ် အသုံးပြုထားတဲ့ တခြား Table တွေ (related tables) မှာပါ လိုက်လံပြင်ဆင်ဖို့ လိုအပ်ပါလိမ့်မယ်။ ဒီလိုမပြင်ဆင်မိရင် အချက်အလက် မကိုက်ညီမှုတွေ ဖြစ်ပေါ်လာပြီး data တွေ မှားယွင်းသွားနိုင်ပါတယ်။ Key တန်ဖိုးတစ်ခု ပြောင်းလဲခြင်းဟာ database တစ်ခုလုံးမှာ ဆင့်ကဲသက်ရောက်မှု (cascading effect) တွေ ဖြစ်ပေါ်စေနိုင်ပါတယ်။ ပြင်ဆင်မှုတွေက ရှုပ်ထွေးပြီး စွမ်းဆောင်ရည် (performance) ကိုလည်း ကျဆင်းစေပါတယ်။

Candidate Keys ဥပမာ -

Students Table

StudentId (PK)NameEmailPhone
1Alicealice@gmail.com1234567890
2Bobbob@gmail.com0987654321
3Charliecharlie@gmail.com[Null]

ဒီ table မှာ Candidate Key ဖြစ်နိုင်တာတွေကတော့-

StudentID ✅ (unique, non-null, irreducible)
Email ✅ (unique, non-null, irreducible)

ဒီဥပမာမှာ StudentID နှင့် Email နှစ်ခုလုံးဟာ Candidate Key ဖြစ်နိုင်တဲ့ အရည်အချင်းတွေ ပြည့်မီပါတယ်။

  • StudentID: ကျောင်းသားတစ်ယောက်စီမှာ သီးခြား ID နံပါတ်တစ်ခုစီ ရှိတဲ့အတွက် ဒါဟာ unique ဖြစ်ပါတယ်။ ဒါ့အပြင် ဒီ ID တစ်ခုတည်းဖြင့် ကျောင်းသားတစ်ယောက်စီကို ရှာဖွေထုတ်ယူနိုင်ပါတယ်။

  • Email: ကျောင်းသားတစ်ယောက်စီမှာ သီးခြား အီးမေးလ်လိပ်စာတစ်ခုစီပဲ ရှိတယ်လို့ ယူဆရင် ဒါဟာ unique ဖြစ်ပါတယ်။ ဒီအီးမေးလ်တစ်ခုတည်းဖြင့် ကျောင်းသားတစ်ယောက်စီကို ရှာဖွေထုတ်ယူနိုင်ပါတယ်။

ကျွန်တော်တို့က StudentID ကို primary key အဖြစ် ရွေးချယ်လိုက်ပြီဆိုပါစို့။ အဲဒီအခါ Email ဟာ Candidate Key အဖြစ် ဆက်လက်တည်ရှိနေဆဲ ဖြစ်ပါတယ်။

ရှင်းလင်းချက် -

Table တစ်ခုမှာ Primary Key တစ်ခုတည်းသာ ရှိရပါမယ်။

ဒါပေမယ့် Primary Key အဖြစ် ရွေးချယ်ခံရဖို့ အရည်အချင်းပြည့်မီတဲ့ Candidate Key တွေကတော့ တစ်ခုထက်ပိုပြီး ရှိနိုင်ပါတယ်။

StudentID ကို ရွေးချယ်လိုက်ပေမယ့် Email က သူ့ရဲ့ unique ဖြစ်မှုနှင့် NULL မဖြစ်ရတဲ့ စည်းမျဉ်းတွေကို ဆက်လက်ပြည့်မီနေဆဲဖြစ်တာကြောင့် သူက Candidate Key အဖြစ်ပဲ ဆက်တည်ရှိနေတာ ဖြစ်ပါတယ်။ သူ့ကို Primary Key အဖြစ် ရွေးချယ်မခံရလို့ Candidate Key မဟုတ်တော့တာမျိုး မရှိပါဘူး။

Table တစ်ခုအတွက် Candidate Key တည်ဆောက်ခြင်းဟာ တော်တော်လေး ရိုးရှင်းပါတယ်။ Candidate Key ရဲ့ စည်းမျဉ်းတွေ အားလုံးနှင့် ကိုက်ညီတဲ့ field ဒါမှမဟုတ် set of fields ကို ရှာဖွေဖို့ပဲ ဖြစ်ပါတယ်။

Natural Candidate Key မရှိတဲ့အခါ ဘာလုပ်မလဲ - Artificial Candidate Key တစ်ခု ဖန်တီးပါ။

Section titled “Natural Candidate Key မရှိတဲ့အခါ ဘာလုပ်မလဲ - Artificial Candidate Key တစ်ခု ဖန်တီးပါ။”

တစ်ခါတလေမှာ table တစ်ခုထဲက ရှိပြီးသား field တွေထဲမှာ Candidate Key ဖြစ်ဖို့ အရည်အချင်းပြည့်မီတဲ့ field တစ်ခုမှ မရှိတာမျိုး ကြုံရနိုင်ပါတယ်။

❌ No natural candidate key: Cars Table

MakeModelYearColorOwnerID
ToyotaCorolla2020Red100
ToyotaCorolla2020Black
HondaCivic2020Blue101

ဒီ table မှာ ဘယ် column ကမှ unique မဖြစ်တဲ့အတွက် Candidate Key မရှိပါဘူး။

ဒီလိုဖြစ်လာတဲ့အခါမှာတော့ Artificial Candidate Key တစ်ခုကို table ထဲမှာ field အသစ်တစ်ခု ထပ်ပေါင်းထည့်ပြီး ဖန်တီးနိုင်ပါတယ်။ ဒီ field အသစ်ဟာ Candidate Key ရဲ့ လိုအပ်တဲ့ စည်းမျဉ်းအားလုံးဖြင့် ကိုက်ညီရပါမယ်။ ထပ်ပေါင်းထည့်ပြီးတာနှင့် ဒီဖန်တီးထားတဲ့ field က သင့် table ရဲ့ တရားဝင် Candidate Key ဖြစ်လာပါလိမ့်မယ်။

✅ With artificial candidate key: Cars Table

IDMakeModelYearColorOwnerID
1ToyotaCorolla2020Red100
2ToyotaCorolla2020Black
3HondaCivic2020Blue101

ဥပမာ -

ID လို့ နာမည်ပေးထားတဲ့ field အသစ်တစ်ခုကို ဖန်တီးပြီး (သို့မဟုတ် CustomerID, ProductID စသဖြင့် ပေးနိုင်ပါတယ်) Artificial Candidate Key အဖြစ် အသုံးပြုနိုင်ပါတယ်။

ဒီ ID field ကို record အသစ်တိုင်းအတွက် unique ဖြစ်ပြီး NULL မဟုတ်တဲ့ တန်ဖိုးတစ်ခုစီ (ဥပမာ- 1, 2, 3…) ကို အလိုအလျောက် သတ်မှတ်ပေးလိုက်ပါတယ်။

အခုဆိုရင် ဒီ ID field က စည်းမျဉ်းအားလုံးဖြင့် ကိုက်ညီတဲ့ Candidate Key (Primary Key အဖြစ်သုံးနိုင်တဲ့) တစ်ခု ဖြစ်သွားပါပြီ။ ဒါဟာ လက်တွေ့မှာ အလွန်အသုံးများတဲ့ နည်းလမ်းတစ်ခုဖြစ်ပါတယ်။