Database Structure: Relationships
Relationship
Section titled “Relationship”Relationship ဆိုတာ relational database ရဲ့ အရေးကြီးတဲ့ အစိတ်အပိုင်းတစ်ခု ဖြစ်ပြီး တစ်ခုနှင့်တစ်ခု ဆက်စပ်မှုရှိနေတဲ့ table နှစ်ခုကို ချိတ်ဆက်ပေးပါတယ်။ Table နှစ်ခုကြားမှာ တည်ရှိနိုင်တဲ့ relation အမျိုးအစား သုံးမျိုးရှိပါတယ်။ One-to-One၊ One-to-Many နှင့် Many-to-Many တို့ပဲ ဖြစ်ပါတယ်။
Type of Relationship
Section titled “Type of Relationship”One-to-One Relationship
Section titled “One-to-One Relationship”One-to-One Relationship ဆိုတာက Table နှစ်ခုချိတ်ဆက်နေတာဖြစ်ပြီးတော့ ပထမ table ထဲက record တစ်ခုက ဒုတိယ table ထဲက record တစ်ခုတည်းဖြင့်သာ ဆက်စပ်မှုရှိပြီး ဒုတိယ table ထဲက record တစ်ခုဟာလည်း ပထမ table ထဲက record တစ်ခုတည်းဖြင့်သာ ဆက်စပ်မှုရှိနေတာကို ဆိုလိုပါတယ်။
One-to-One Relationship မှာ table တစ်ခုက parent table အဖြစ် ဆောင်ရွက်ပြီး ကျန်တစ်ခုကတော့ child table အဖြစ် ဆောင်ရွက်ပါတယ်။ ဒီ relation ကို တည်ဆောက်တဲ့အခါ parent table ရဲ့ Primary Key ကို ကူးယူပြီး child table ထဲမှာ ထည့်သွင်းရပါတယ်။ အဲဒီအခါ parent table ရဲ့ Primary Key က child table ထဲမှာ Foreign Key ဖြစ်လာပါတယ်။

Fig. 2.1: A One-To-One Relationship
ရှင်းလင်းချက်
ဥပမာကိုကြည့်မယ်ဆိုရင် Employees table
က Parent table
ဖြစ်ပြီး Laptops table
က Child table
ဖြစ်ပါတယ်။
ဝန်ထမ်းတစ်ယောက်စီက laptop တစ်လုံးပဲ သုံးစွဲခွင့်ရှိပြီး laptop တစ်လုံးစီကိုလည်း ဝန်ထမ်းတစ်ယောက်တည်းကသာ ကိုင်တွယ်အသုံးပြုပါတယ်။
One-to-Many Relationship
Section titled “One-to-Many Relationship”One-to-Many Relationship ဆိုတာက Table နှစ်ခုချိတ်ဆက်နေတာဖြစ်ပြီးတော့ ပထမ table ထဲက record တစ်ခုက ဒုတိယ table ထဲက record များစွာနှင့် ဆက်စပ်မှုရှိနိုင်ပေမယ့် ဒုတိယ table ထဲက record တစ်ခုကတော့ ပထမ table ထဲက record တစ်ခုတည်းဖြင့်သာ ဆက်စပ်မှုရှိနိုင်တာကို ဆိုလိုပါတယ်။
(One-to-One Relationship ကို ဖော်ပြရာမှာ အသုံးပြုခဲ့တဲ့ parent/child model ဟာ ဒီမှာလည်း အလုပ်ဖြစ်ပါတယ်။ ဒီအခြေအနေမှာ relation ရဲ့ “တစ်ခု” ဘက်ခြမ်းမှာရှိတဲ့ table က parent table ဖြစ်ပြီး “အများ” ဘက်ခြမ်းမှာရှိတဲ့ table ကတော့ child table ဖြစ်ပါတယ်။) One-to-Many Relationship တစ်ခုကို တည်ဆောက်တဲ့အခါ parent table ရဲ့ Primary Key ကို ကူးယူပြီး child table ထဲကို ထည့်သွင်းရပါတယ်။ အဲဒီအခါ parent table ရဲ့ Primary Key က child table မှာ Foreign Key ဖြစ်လာပါတယ်။

Fig. 2.2: A One-To-Many Relationship
ရှင်းလင်းချက်
ဥပမာကိုကြည့်မယ်ဆိုရင် Departments table
က Parent table
ဖြစ်ပြီး Employees table
က Child table
ဖြစ်ပါတယ်။
ဌာနတစ်ခုမှာ ဝန်ထမ်းတွေအများကြီး ရှိနိုင်ပေမဲ့ ဝန်ထမ်းတစ်ယောက်စီကတော့ ဌာနတစ်ခုစီကပဲဖြစ်ပါတယ်။
Many-to-Many Relationship
Section titled “Many-to-Many Relationship”Many-to-Many Relationship ဆိုတာက Table နှစ်ခုချိတ်ဆက်နေတာဖြစ်ပြီးတော့ ပထမ table ထဲက record တစ်ခုက ဒုတိယ table ထဲက record များစွာနှင့် ဆက်စပ်မှုရှိနိုင်သလို ဒုတိယ table ထဲက record တစ်ခုကလည်း ပထမ table ထဲက record များစွာနှင့် ဆက်စပ်မှုရှိနိုင်တာကို ဆိုလိုပါတယ်။
Many-to-Many Relationship ကို တည်ဆောက်ရာတွင် Linking Table တစ်ခုလိုအပ်ပါတယ်။ (linking table အကြောင်းကို ဒီအခန်းရဲ့ အစပိုင်းလောက်က အနည်းငယ် ရှင်းပြထားပါတယ်။) Linking Table ထဲမှာ မူရင်း table နှစ်ခုရဲ့ Primary Key တွေကို Foreign Key တွေအဖြစ် လာရောက်သိမ်းဆည်းပါတယ်။ ဒီ Foreign Key နှစ်ခုကို ပေါင်းစပ်ပြီး Linking Table အတွက် Composite Primary Key (ပေါင်းစပ် Primary Key) တစ်ခုအဖြစ် ဖန်တီးနိုင်ပါတယ်။

Fig. 2.3: A Many-To-Many Relationship
ရှင်းလင်းချက်
ဥပမာကိုကြည့်မယ်ဆိုရင် Books table
နှင့် Authors table
ကြားမှာ BookAuthors table
(linking table) ကို သုံးထားပါတယ်။ စာအုပ်တစ်အုပ်တည်းကို စာရေးဆရာအများကြီးက ပေါင်းရေးနိုင်သလို စာရေးဆရာတစ်ယောက်တည်းကလည်း စာအုပ်တွေအများကြီးရေးသားနိုင်ပါတယ်။
AuthorBooks table
မှာ BookID
တစ်ခုတည်းဆိုရင် Foreign key
အနေဖြင့် ဆောင်ရွက်ပြီး AuthorID
တစ်ခုတည်းဆိုရင်လည်း Foreign key
အနေဖြင့် ဆောင်ရွက်ပါတယ်။
(BookID, AuthorID)
နှစ်ခုကို ပေါင်းစပ်၍ Composite Primary Key
အနေဖြင့် အသုံးပြုလို့ရပါတယ်။
Self-Referencing Relationships
Section titled “Self-Referencing Relationships”Self-Referencing Relationship ဆိုတာ table နှစ်ခုကြားမှာ တည်ရှိတဲ့ relation အမျိုးအစား မဟုတ်ဘဲ Table တစ်ခုတည်းက သူ့ကိုယ်သူ ပြန်လည်ချိတ်ဆက်နေတဲ့ relation အမျိုးအစားကို ဆိုလိုတာဖြစ်ပါတယ်။ ဒီ relation ကို hierarchical ဒါမှမဟုတ် recursive data structure တွေကို ကိုယ်စားပြုရာတွင် အလွန်အသုံးဝင်ပါတယ်။
One-to-One Relationship
Section titled “One-to-One Relationship”Table တစ်ခုထဲက record တစ်ခုက အဲဒီ table ထဲမှာပဲရှိတဲ့ တခြား record တစ်ခုတည်းဖြင့်သာ ဆက်စပ်မှုရှိတဲ့အခါ Self-Referencing One-to-One Relationship ကိုတည်ဆောက်လို့ရပါတယ်။

Fig. 2.4: A Self-Referencing One-To-One Relationship
ရှင်းလင်းချက်
ဥပမာကိုကြည့်မယ်ဆိုရင် Persons table
မှာ လူပုဂ္ဂိုလ်စာရင်းနှင့် သူတို့ရဲ့အိမ်ထောင်ဖက်စာရင်းကို သိမ်းထားမယ်ဆိုပါစို့။
အဲဒီအိမ်ထောင်ဖက်ဟာလည်း ဒီ Persons table
ထဲမှာပဲ ရှိနေတဲ့ လူတစ်ဦးပဲ ဖြစ်မယ်ဆိုရင် self-referencing one-to-one relationship
ကိုလုပ်ဆောင်နိုင်ပါတယ်။
ဒီဥပမာမှာ -
Alice
နှင့် Bob
တို့ဟာ အိမ်ထောင်ဖက်တွေ ဖြစ်ကြပါတယ်။
Charlie
က အိမ်ထောင်ဖက်မရှိသေးတဲ့အတွက် (NULL) ဖြစ်ပါတယ်။
David
နှင့် Eve
တို့ဟာ အိမ်ထောင်ဖက်တွေ ဖြစ်ကြပါတယ်။
One-to-Many Relationship
Section titled “One-to-Many Relationship”Table တစ်ခုထဲမှာ record တစ်ခုဟာ အဲ့ဒီ table ထဲက တခြား record များစွာနှင့် ဆက်စပ်နေနိုင်တဲ့အခါ Self-Referencing One-to-Many Relationship ကိုတည်ဆောက်လို့ရပါတယ်။ ဒီ relation က tree structure (ဥပမာ- parent/child relationships လိုမျိုး) တွေကို table တစ်ခုတည်းသုံးပြီး ဖော်ပြနိုင်ပါတယ်။

Fig. 2.5: A Self-Referencing One-To-Many Relationship
ရှင်းလင်းချက်
ဥပမာကိုကြည့်မယ်ဆိုရင် Categories table
မှာ category
တစ်ခုမှာ subcategories
တွေအများကြီးရှိနိုင်ပြီး subcategory
တစ်ခုမှာတော့ parent category
တစ်ခုပဲရှိပါတယ်။
Category
အချို့ကတော့ top-level
ဖြစ်ပြီး parent
မရှိတဲ့အတွက် Null
ဖြစ်ပါတယ်။
ဒီ structure ဟာ E-commerce site တွေမှာ product အမျိုးအစားတွေ (Electronics -> Laptops -> Gaming Laptops)
၊ အဖွဲ့အစည်းတစ်ခုရဲ့ ဌာနအဆင့်ဆင့်ဖွဲ့စည်းပုံတွေ (CEO -> Managers -> Team Leads)
၊
ဒါမှမဟုတ် comment တွေအောက်မှာ reply တွေအဆင့်ဆင့်ရေးတာမျိုးတွေ အလွန်အသုံးဝင်ပါတယ်။
Many-to-Many Relationship
Section titled “Many-to-Many Relationship”Table တစ်ခုထဲက record တစ်ခုစီဟာ အဲ့ဒီ table ထဲမှာပဲရှိတဲ့ တခြား record တစ်ခု (သို့) တစ်ခုထက်ပိုတဲ့ record တွေနှင့် ဆက်စပ်မှုရှိနိုင်ပြီး အဲ့ဒီ record တစ်ခု (သို့) တစ်ခုထက်ပိုတဲ့ record တွေကလည်း မူလ record နှင့်ပြန်လည်ဆက်စပ်မှုရှိနိုင်တဲ့အခါ self-referencing many-to-many relationship ကိုတည်ဆောက်လို့ရပါတယ်။ ဒီလို relation ကို တည်ဆောက်ရန်အတွက် ကြားခံ (linking table) တစ်ခုကို အသုံးပြုပါတယ်။

Fig. 2.6: A One-To-One Relationship
ရှင်းလင်းချက်
ဥပမာကိုကြည့်မယ်ဆိုရင် Persons table
မှာ
လူတစ်ယောက်က သူငယ်ချင်းတွေအများကြီးရှိနိုင်ပြီး သူငယ်ချင်းတစ်ယောက်ချင်းစီကလည်း သူ့ကို ပြန်လည်သူငယ်ချင်းဖွဲ့ထားတာမျိုး (ဥပမာ- Facebook Friend System) ကို PersonFriend
ဆိုတဲ့ Linking Table ဖြင့်တည်ဆောက်နိုင်ပါတယ်။
Alice
ဟာ Bob
, Carol
နှင့် သူငယ်ချင်းဖြစ်ပါတယ်။
တစ်ချိန်တည်းမှာပဲ အဲ့ဒီ Bob
, Carol
ကလည်း Alice
နှင့် သူငယ်ချင်းဖြစ်ပါတယ်။
Parent Table vs Child Table
Section titled “Parent Table vs Child Table”Parent Table နှင့် Child Table ကို ဘယ်လိုသိနိုင်မလဲ။
Section titled “Parent Table နှင့် Child Table ကို ဘယ်လိုသိနိုင်မလဲ။”Database ထဲမှာ table နှစ်ခုကြား relationship တစ်ခုရှိတယ်ဆိုရင် ဘယ် table က Parent Table ဖြစ်ပြီး ဘယ် table က Child Table ဖြစ်တယ်ဆိုတာကို သိဖို့ အဓိက နည်းလမ်းကတော့ Primary Key နှင့် Foreign Key ကို ကြည့်ခြင်းပဲ ဖြစ်ပါတယ်။
အဓိကစည်းမျဉ်း။
Section titled “အဓိကစည်းမျဉ်း။”Primary Key ရှိတဲ့ table က Parent Table ဖြစ်ပါတယ်။
Foreign Key ရှိတဲ့ table က Child Table ဖြစ်ပါတယ်။
ပိုမိုရှင်းလင်းစွာ နားလည်ရန်။
Section titled “ပိုမိုရှင်းလင်းစွာ နားလည်ရန်။”1. Dependency (မှီခိုမှု) ကို ကြည့်ပါ။
Parent Table ဟာ သူ့ဘာသာသူ ရပ်တည်နိုင်ပြီး အချက်အလက်တွေရဲ့ မူရင်းဇစ်မြစ် (source) ဖြစ်ပါတယ်။ Child Table ကတော့ အဓိပ္ပာယ်ပြည့်စုံဖို့ Parent Table ပေါ်မှာ မှီခိုနေရပါတယ်။ ဥပမာ- Orders table ထဲမှာ CustomerID မရှိရင် ဒီ order က ဘယ်သူ့ order မှန်း သိနိုင်မှာမဟုတ်ပါဘူး။
2. Information Flow (အချက်အလက် စီးဆင်းမှု) ကိုစဉ်းစားပါ။
Parent Table မှာ ပိုပြီး “အသေးစိတ်မကျသေးတဲ့” (general) အချက်အလက်တွေ ပါဝင်လေ့ရှိပါတယ်။ (ဥပမာ- Customers, Departments)။ Child Table မှာတော့ Parent Table ရဲ့ အချက်အလက်တွေနှင့် ပတ်သက်တဲ့ ပိုပြီး “အသေးစိတ်ကျတဲ့” အချက်အလက်တွေ ပါဝင်လေ့ရှိပါတယ်။ (ဥပမာ- Orders, Employees)။
3. Relationship Type (ဆက်စပ်မှု အမျိုးအစား) နှင့်နေရာချထားပုံ။
One-to-One Relationship
ဒီ relationship မှာ Parent Table ရဲ့ Primary Key ကို Child Table မှာ Foreign Key အဖြစ် ထားရှိပါတယ်။
One-to-Many Relationship
“တစ်ခု” ဘက်ခြမ်းမှာရှိတဲ့ table က Parent Table ဖြစ်ပါတယ်။ ဥပမာ - Customers table က Parent ဖြစ်ပြီး၊ Orders table က Child ဖြစ်ပါတယ်။ Parent Table ရဲ့ Primary Key ကို Child Table မှာ Foreign Key အဖြစ် ထည့်သွင်းထားပါတယ်။
Many-to-Many Relationship
ဒီအမျိုးအစားမှာတော့ တိုက်ရိုက် Parent/Child ဆက်စပ်မှု မရှိပါဘူး။ ဒီအစား Linking Table (သို့မဟုတ် Junction Table) တစ်ခုကို အသုံးပြုပြီး ဆက်စပ်မှုကို တည်ဆောက်ပါတယ်။