# ဒေတာနှင့်အလုပ်လုပ်ခြင်း: ဆက်စပ်ဒေတာဘေ့စ်များ |![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/05-RelationalData.png)| |:---:| | ဒေတာနှင့်အလုပ်လုပ်ခြင်း: ဆက်စပ်ဒေတာဘေ့စ်များ - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | သင်သည် အချက်အလက်များကို သိမ်းဆည်းရန် အရင်က စာရင်းဇယားတစ်ခုကို အသုံးပြုဖူးဖြစ်နိုင်သည်။ စာရင်းဇယားတွင် အတန်းများနှင့် ကော်လံများရှိပြီး၊ အတန်းများတွင် အချက်အလက်များ (သို့) ဒေတာများ ပါဝင်ပြီး ကော်လံများသည် အချက်အလက်များကို ဖော်ပြသည် (တခါတရံ metadata ဟုခေါ်သည်)။ ဆက်စပ်ဒေတာဘေ့စ်သည် ကော်လံများနှင့် အတန်းများပါဝင်သည့် ဇယားများအပေါ် အခြေခံ၍ တည်ဆောက်ထားပြီး၊ သင်အား အချက်အလက်များကို ဇယားများစွာတွင် ဖြန့်ဝေထားနိုင်စေသည်။ ၎င်းက သင်အား ပိုမိုရှုပ်ထွေးသော ဒေတာများနှင့် အလုပ်လုပ်ရန်၊ မိတ္တူတူဖြစ်မှုကို ရှောင်ရှားရန်နှင့် ဒေတာကို ရှာဖွေသုံးသပ်ရာတွင် လွတ်လပ်မှုရှိစေရန် ခွင့်ပြုသည်။ ဆက်စပ်ဒေတာဘေ့စ်၏ အယူအဆများကို လေ့လာကြရအောင်။ ## [မကြိုတင်သင်ခန်းစာ စစ်ဆေးမှု](https://ff-quizzes.netlify.app/en/ds/quiz/8) ## အားလုံး ဇယားများဖြင့် စတင်သည် ဆက်စပ်ဒေတာဘေ့စ်တွင် အဓိကအနေဖြင့် ဇယားများရှိသည်။ စာရင်းဇယားနှင့်တူပင် ဇယားသည် ကော်လံများနှင့် အတန်းများစုစည်းမှုဖြစ်သည်။ အတန်းတွင် ကျွန်ုပ်တို့ လုပ်ဆောင်လိုသော ဒေတာ သို့မဟုတ် အချက်အလက်များ ပါဝင်သည်၊ ဥပမာ- မြို့နာမည် သို့မဟုတ် မိုးရွာသည့်ပမာဏ။ ကော်လံများသည် သိမ်းဆည်းထားသော ဒေတာကို ဖော်ပြသည်။ မြို့များအကြောင်း အချက်အလက်များ သိမ်းဆည်းရန် ဇယားတစ်ခု စတင်ဖန်တီးကြရအောင်။ မြို့နာမည်နှင့် နိုင်ငံကို စတင်ထည့်သွင်းနိုင်သည်။ အောက်ပါအတိုင်း ဇယားတစ်ခုတွင် သိမ်းဆည်းနိုင်သည်- | City | Country | | -------- | ------------- | | Tokyo | Japan | | Atlanta | United States | | Auckland | New Zealand | **city**, **country** နှင့် **population** ဟူသော ကော်လံနာမည်များသည် သိမ်းဆည်းထားသော ဒေတာကို ဖော်ပြပြီး၊ အတန်းတိုင်းတွင် မြို့တစ်မြို့အကြောင်း အချက်အလက်များ ပါဝင်သည်ကို သတိပြုပါ။ ## ဇယားတစ်ခုတည်းနည်းလမ်း၏ အားနည်းချက်များ အထက်ပါ ဇယားသည် သင်အတွက် များစွာ သိရှိပြီးသားဖြစ်နိုင်သည်။ ကျွန်ုပ်တို့၏ ဒေတာဘေ့စ်အသစ်တွင် နှစ်စဉ် မိုးရွာသည့်ပမာဏ (မီလီမီတာဖြင့်) ကို ထည့်သွင်းကြရအောင်။ ၂၀၁၈၊ ၂၀၁၉ နှင့် ၂၀၂၀ ခုနှစ်များကို အာရုံစိုက်ပါမည်။ တိုကျိုအတွက် ထည့်သွင်းမည်ဆိုပါက အောက်ပါအတိုင်း ဖြစ်နိုင်သည်- | City | Country | Year | Amount | | ----- | ------- | ---- | ------ | | Tokyo | Japan | 2020 | 1690 | | Tokyo | Japan | 2019 | 1874 | | Tokyo | Japan | 2018 | 1445 | ကျွန်ုပ်တို့၏ ဇယားအကြောင်း သင်ဘာတွေ သတိပြုမိပါသလဲ? မြို့နာမည်နှင့် နိုင်ငံအမည်ကို မကြာခဏ မိတ္တူတူ ထပ်မံရေးသားနေသည်ကို သတိပြုမိနိုင်သည်။ ၎င်းသည် သိမ်းဆည်းမှုအတွက် အများကြီး နေရာယူနိုင်ပြီး မလိုအပ်သော မိတ္တူများ ဖြစ်သည်။ အဆုံးမှာတော့ တိုကျိုသည် ကျွန်ုပ်တို့ စိတ်ဝင်စားသော နာမည်တစ်ခုသာ ရှိသည်။ အိုကေ၊ အခြားနည်းလမ်းတစ်ခု ကြိုးစားကြည့်ကြရအောင်။ နှစ်စဉ်အတွက် ကော်လံအသစ်များ ထည့်သွင်းကြည့်ပါ- | City | Country | 2018 | 2019 | 2020 | | -------- | ------------- | ---- | ---- | ---- | | Tokyo | Japan | 1445 | 1874 | 1690 | | Atlanta | United States | 1779 | 1111 | 1683 | | Auckland | New Zealand | 1386 | 942 | 1176 | ဤနည်းလမ်းသည် အတန်း မိတ္တူတူဖြစ်မှုကို ရှောင်ရှားပေမယ့် အခြား စိန်ခေါ်မှုများကို ဖြစ်ပေါ်စေသည်။ နှစ်အသစ်တစ်ခုရှိသည့်အခါ ဇယား၏ ဖွဲ့စည်းပုံကို ပြင်ဆင်ရန် လိုအပ်မည်ဖြစ်သည်။ ထို့အပြင် ဒေတာများ ကြီးထွားလာသည်နှင့်အမျှ နှစ်များကို ကော်လံအဖြစ် ထားရှိခြင်းသည် တန်ဖိုးများ ရယူခြင်းနှင့် တွက်ချက်ခြင်းကို ပိုမိုခက်ခဲစေမည်ဖြစ်သည်။ ဒါကြောင့် ဇယားများစွာနှင့် ဆက်စပ်မှုများ လိုအပ်သည်။ ဒေတာကို ခွဲခြားခြင်းဖြင့် မိတ္တူတူဖြစ်မှုကို ရှောင်ရှားနိုင်ပြီး ဒေတာနှင့် အလုပ်လုပ်ရာတွင် ပိုမိုလွတ်လပ်မှု ရရှိစေသည်။ ## ဆက်စပ်မှု၏ အယူအဆများ ကျွန်ုပ်တို့၏ ဒေတာသို့ ပြန်သွားပြီး ဘာတွေ ခွဲခြားလိုသည်ကို ဆုံးဖြတ်ကြရအောင်။ မြို့များအတွက် နာမည်နှင့် နိုင်ငံကို သိမ်းဆည်းလိုသည်ကို သိပြီးဖြစ်သည်၊ ထို့ကြောင့် ၎င်းကို ဇယားတစ်ခုတွင် ထားသင့်သည်။ | City | Country | | -------- | ------------- | | Tokyo | Japan | | Atlanta | United States | | Auckland | New Zealand | သို့သော် နောက်တစ်ဇယား ဖန်တီးမီ မြို့တိုင်းကို ဘယ်လို ရည်ညွှန်းမည်ကို ဆုံးဖြတ်ရမည်။ အတန်းတစ်ခုကို သီးသန့်သတ်မှတ်ရန် အမျိုးအစားတစ်ခုလိုအပ်သည်၊ ID သို့မဟုတ် (နည်းပညာဆိုင်ရာ ဒေတာဘေ့စ်စကားလုံးဖြင့်) primary key တစ်ခုလိုအပ်သည်။ primary key သည် ဇယားတစ်ခုတွင် အတန်းတစ်ခုကို သီးခြားသတ်မှတ်ရန် အသုံးပြုသော တန်ဖိုးဖြစ်သည်။ ၎င်းသည် တန်ဖိုးတစ်ခုအပေါ် အခြေခံနိုင်သော်လည်း (ဥပမာ မြို့နာမည်ကို အသုံးပြုနိုင်သည်) အများအားဖြင့် နံပါတ် သို့မဟုတ် အခြားသတ်မှတ်ချက်တစ်ခုဖြစ်သင့်သည်။ id သည် မပြောင်းလဲသင့်ပါ၊ မဟုတ်လျှင် ဆက်စပ်မှု ပျက်စီးနိုင်သည်။ အများအားဖြင့် primary key သို့မဟုတ် id သည် အလိုအလျောက် ဖန်တီးသော နံပါတ်ဖြစ်သည်။ > ✅ Primary key ကို အတိုကောက် PK ဟုခေါ်သည် ### cities | city_id | City | Country | | ------- | -------- | ------------- | | 1 | Tokyo | Japan | | 2 | Atlanta | United States | | 3 | Auckland | New Zealand | > ✅ သင်သည် ဒီသင်ခန်းစာအတွင်း "id" နှင့် "primary key" ဆိုသော စကားလုံးများကို အစားထိုးအသုံးပြုကြောင်း တွေ့မြင်မည်။ ဒီအယူအဆများသည် DataFrames တွင်လည်း သက်ဆိုင်သည်၊ သင်နောက်ပိုင်းတွင် DataFrames ကို လေ့လာမည်။ DataFrames တွင် "primary key" ဆိုသော စကားလုံးကို မသုံးသော်လည်း ၎င်းတို့သည် အလားတူ အပြုအမူ ပြုလုပ်သည်ကို တွေ့မြင်မည်။ မြို့များ ဇယားကို ဖန်တီးပြီးနောက် မိုးရွာမှုကို သိမ်းဆည်းကြရအောင်။ မြို့အကြောင်း အချက်အလက်များကို မိတ္တူတူ ထပ်မံရေးသားခြင်း မပြုဘဲ id ကို အသုံးပြုနိုင်သည်။ ထို့အပြင် ဖန်တီးသည့် ဇယားအသစ်တွင်လည်း *id* ကော်လံရှိရမည်၊ ဇယားအားလုံးတွင် id သို့မဟုတ် primary key ရှိရမည်။ ### rainfall | rainfall_id | city_id | Year | Amount | | ----------- | ------- | ---- | ------ | | 1 | 1 | 2018 | 1445 | | 2 | 1 | 2019 | 1874 | | 3 | 1 | 2020 | 1690 | | 4 | 2 | 2018 | 1779 | | 5 | 2 | 2019 | 1111 | | 6 | 2 | 2020 | 1683 | | 7 | 3 | 2018 | 1386 | | 8 | 3 | 2019 | 942 | | 9 | 3 | 2020 | 1176 | အသစ်ဖန်တီးထားသော **rainfall** ဇယားအတွင်းရှိ **city_id** ကော်လံကို သတိပြုပါ။ ၎င်းကော်လံတွင် **cities** ဇယားရှိ ID များကို ရည်ညွှန်းသော တန်ဖိုးများ ပါဝင်သည်။ နည်းပညာဆိုင်ရာ ဆက်စပ်ဒေတာအရ ၎င်းကို **foreign key** ဟုခေါ်သည်။ ၎င်းသည် အခြားဇယားမှ primary key တစ်ခုဖြစ်သည်။ ၎င်းကို ရည်ညွှန်းချက် သို့မဟုတ် အညွှန်းတစ်ခုအဖြစ် စဉ်းစားနိုင်သည်။ **city_id** 1 သည် Tokyo ကို ရည်ညွှန်းသည်။ > [!NOTE] > Foreign key ကို အတိုကောက် FK ဟုခေါ်သည် ## ဒေတာ ရယူခြင်း ဒေတာကို ဇယားနှစ်ခုသို့ ခွဲခြားထားသောကြောင့် ဒေတာကို မည်သို့ ရယူမည်ကို စဉ်းစားနိုင်သည်။ MySQL, SQL Server သို့မဟုတ် Oracle ကဲ့သို့ ဆက်စပ်ဒေတာဘေ့စ်ကို အသုံးပြုပါက Structured Query Language သို့မဟုတ် SQL ဟုခေါ်သော ဘာသာစကားကို အသုံးပြုနိုင်သည်။ SQL (တခါတရံ sequel ဟု အသံထွက်) သည် ဆက်စပ်ဒေတာဘေ့စ်တွင် ဒေတာ ရယူခြင်းနှင့် ပြင်ဆင်ခြင်းအတွက် အသုံးပြုသော စံနမူနာ ဘာသာစကားဖြစ်သည်။ ဒေတာ ရယူရန် `SELECT` ကိရိယာကို အသုံးပြုသည်။ အဓိကအားဖြင့် သင် ကြည့်လိုသော ကော်လံများကို `SELECT` ဖြင့် ရွေးချယ်ပြီး၊ ၎င်းတို့ ပါဝင်သော ဇယားမှ `FROM` ဖြင့် ရွေးချယ်သည်။ မြို့နာမည်များကိုသာ ပြသလိုပါက အောက်ပါအတိုင်း အသုံးပြုနိုင်သည်- ```sql SELECT city FROM cities; -- Output: -- Tokyo -- Atlanta -- Auckland ``` `SELECT` သည် သင် ရွေးချယ်လိုသော ကော်လံများကို စာရင်းပြုစုရာဖြစ်ပြီး၊ `FROM` သည် ဇယားများကို စာရင်းပြုစုရာဖြစ်သည်။ > [!NOTE] > SQL စာလုံးပေါင်းသည် case-insensitive ဖြစ်သည်၊ အဓိပ္ပါယ်မှာ `select` နှင့် `SELECT` သည် တူညီသည်။ သို့သော် သင်အသုံးပြုသော ဒေတာဘေ့စ်အမျိုးအစားပေါ်မူတည်၍ ကော်လံများနှင့် ဇယားများသည် case-sensitive ဖြစ်နိုင်သည်။ ထို့ကြောင့် programming တွင် အရာအားလုံးကို case-sensitive အဖြစ် ဆက်ဆံသင့်သည်။ SQL စာမေးပွဲရေးရာတွင် အဓိက စကားလုံးများကို အမြင့်အက္ခရာဖြင့် ရေးသားသည်။ အထက်ပါ query သည် မြို့အားလုံးကို ပြသမည်။ New Zealand တွင်ရှိသော မြို့များကိုသာ ပြသလိုပါက စစ်ထုတ်ရန် လိုအပ်သည်။ SQL တွင် ၎င်းအတွက် `WHERE` ဆိုသော keyword ကို အသုံးပြုသည်၊ "တစ်ခုခုမှန်ကန်သောနေရာ" ဟု ဆိုလိုသည်။ ```sql SELECT city FROM cities WHERE country = 'New Zealand'; -- Output: -- Auckland ``` ## ဒေတာများ ပေါင်းစည်းခြင်း ယနေ့အထိ ဇယားတစ်ခုမှ ဒေတာ ရယူခဲ့သည်။ ယခုမှာ **cities** နှင့် **rainfall** နှစ်ခုလုံးမှ ဒေတာများကို ပေါင်းစည်းလိုသည်။ ၎င်းကို *joining* လုပ်ခြင်းဖြင့် ပြုလုပ်သည်။ ဇယားနှစ်ခုအကြား အတန်းများကို ဆက်သွယ်ပြီး တစ်ခုချင်းစီမှ ကော်လံတစ်ခု၏ တန်ဖိုးများကို ကိုက်ညီစေသည်။ ဥပမာတွင် **rainfall** ၏ **city_id** ကော်လံနှင့် **cities** ၏ **city_id** ကော်လံကို ကိုက်ညီစေမည်။ ၎င်းက မိုးရွာမှုတန်ဖိုးကို ၎င်း၏ မြို့နှင့် ကိုက်ညီစေမည်။ ကျွန်ုပ်တို့ လုပ်မည့် join အမျိုးအစားမှာ *inner* join ဖြစ်ပြီး၊ တစ်ဖက်ဇယားတွင် မကိုက်ညီသော အတန်းများကို မပြသပါ။ ကျွန်ုပ်တို့၏ အခြေအနေတွင် မြို့တိုင်းတွင် မိုးရွာမှုရှိသောကြောင့် အားလုံး ပြသမည်။ ၂၀၁၉ ခုနှစ်အတွက် မြို့အားလုံး၏ မိုးရွာမှုကို ရယူကြရအောင်။ အဆင့်လိုက် လုပ်ဆောင်မည်။ ပထမအဆင့်မှာ ဆက်သွယ်ရန် ကော်လံများကို ဖော်ပြခြင်းဖြင့် ဒေတာများကို ပေါင်းစည်းခြင်းဖြစ်သည် - ယခင်က ဖော်ပြခဲ့သည့် **city_id**။ ```sql SELECT cities.city rainfall.amount FROM cities INNER JOIN rainfall ON cities.city_id = rainfall.city_id ``` လိုချင်သော ကော်လံနှစ်ခုကို အထူးပြုထားပြီး၊ ဇယားများကို **city_id** ဖြင့် ပေါင်းစည်းလိုသည်ကို ဖော်ပြထားသည်။ ယခု `WHERE` စာကြောင်းကို ထည့်သွင်း၍ ၂၀၁၉ ခုနှစ်ကိုသာ စစ်ထုတ်နိုင်သည်။ ```sql SELECT cities.city rainfall.amount FROM cities INNER JOIN rainfall ON cities.city_id = rainfall.city_id WHERE rainfall.year = 2019 -- Output -- city | amount -- -------- | ------ -- Tokyo | 1874 -- Atlanta | 1111 -- Auckland | 942 ``` ## အနှစ်ချုပ် ဆက်စပ်ဒေတာဘေ့စ်များသည် အချက်အလက်များကို ဇယားများစွာ ခွဲခြားထားပြီး ပြန်လည်ပေါင်းစည်း၍ ပြသခြင်းနှင့် သုံးသပ်ခြင်းအတွက် အခြေခံထားသည်။ ၎င်းက တွက်ချက်မှုများ ပြုလုပ်ရန်နှင့် ဒေတာကို အခြားနည်းဖြင့် ကိုင်တွယ်ရန် အလွန်လွတ်လပ်မှုရှိစေသည်။ သင်သည် ဆက်စပ်ဒေတာဘေ့စ်၏ အဓိကအယူအဆများနှင့် ဇယားနှစ်ခုအကြား join ပြုလုပ်နည်းကို ကြည့်ရှုဖူးသည်။ ## 🚀 စိန်ခေါ်မှု အင်တာနက်ပေါ်တွင် ရရှိနိုင်သည့် ဆက်စပ်ဒေတာဘေ့စ်များ များစွာရှိသည်။ အထက်ပါ ကျွမ်းကျင်မှုများကို အသုံးပြု၍ ဒေတာကို လေ့လာနိုင်သည်။ ## Post-Lecture Quiz ## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ds/quiz/9) ## ပြန်လည်သုံးသပ်ခြင်းနှင့် ကိုယ်တိုင်လေ့လာခြင်း SQL နှင့် ဆက်စပ်ဒေတာဘေ့စ် အယူအဆများကို ဆက်လက်လေ့လာရန် [Microsoft Learn](https://docs.microsoft.com/learn?WT.mc_id=academic-77958-bethanycheum) တွင် အရင်းအမြစ်များ ရရှိနိုင်သည်။ - [ဆက်စပ်ဒေတာ၏ အယူအဆများ ဖော်ပြခြင်း](https://docs.microsoft.com//learn/modules/describe-concepts-of-relational-data?WT.mc_id=academic-77958-bethanycheum) - [Transact-SQL ဖြင့် စတင်မေးမြန်းခြင်း](https://docs.microsoft.com//learn/paths/get-started-querying-with-transact-sql?WT.mc_id=academic-77958-bethanycheum) (Transact-SQL သည် SQL ၏ ဗားရှင်းတစ်ခုဖြစ်သည်) - [Microsoft Learn တွင် SQL အကြောင်းအရာများ](https://docs.microsoft.com/learn/browse/?products=azure-sql-database%2Csql-server&expanded=azure&WT.mc_id=academic-77958-bethanycheum) ## အလုပ်အပ်နှံမှု [လေဆိပ်ဒေတာ ပြသခြင်း](assignment.md) --- **အကြောင်းကြားချက်** ဤစာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု [Co-op Translator](https://github.com/Azure/co-op-translator) ဖြင့် ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှန်ကန်မှုအတွက် ကြိုးစားသော်လည်း အလိုအလျောက် ဘာသာပြန်ချက်များတွင် အမှားများ သို့မဟုတ် မှားယွင်းချက်များ ပါဝင်နိုင်ကြောင်း သတိပြုပါရန် မေတ္တာရပ်ခံအပ်ပါသည်။ မူရင်းစာတမ်းကို မိမိဘာသာစကားဖြင့်သာ တရားဝင်အချက်အလက်အဖြစ် ယူဆသင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်မှ ဘာသာပြန်ခြင်းကို အကြံပြုပါသည်။ ဤဘာသာပြန်ချက်ကို အသုံးပြုမှုကြောင့် ဖြစ်ပေါ်လာနိုင်သည့် နားလည်မှုမှားယွင်းမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။