ဒေတာဘေ့စဒီဇိုင်းလုပ်ဘုံအမှား

သငျသညျမှတ်တမ်းများသို့မဟုတ်မှတ်တမ်းများသန်းပေါင်းများစွာရာပေါင်းများစွာရရှိထားသူတစ်ဦးဒေတာဘေ့စနှင့်အတူအလုပ်လုပ်ကြသည်ဖြစ်စေ, သင့်လျော်သောဒေတာဘေ့စဒီဇိုင်းကိုအမြဲအရေးကြီးပါသည်။ မသာကအများကြီးလွယ်ကူအချက်အလက်များကိုပြန်ထုတ်ယူစေမည်ကိုလည်းအနာဂတ်တွင်အတွက်ဒေတာဘေ့စတိုးချဲ့ရိုးရှင်းပါလိမ့်မယ်။ ကံမကောင်းစွာကအနာဂတ်၌အမှုအရာခက်ခဲစေနိုင်သည်ကိုအနည်းငယ်ထောင်ချောက်ထဲသို့ကျဖို့လွယ်ကူပါတယ်။

အဲဒီမှာနေတဲ့ဒေတာဘေ့စပုံမှန်၏ဘာသာရပ်ပေါ်မှာရေးထားတဲ့တစ်ခုလုံးကိုစာအုပ်တွေသော်လည်း, သငျသညျရိုးရှင်းစွာသည်ဤဘုံအမှားတွေကိုရှောင်ရှားလျှင်, သင်ကောင်းသောဒေတာဘေ့စဒီဇိုင်းကိုမှလက်ျာဘက်လမ်းကြောင်းအပေါ်ဖြစ်လိမ့်မည်။

ဒေတာဘေ့စအမှား # 1: တစ်စားပွဲတင်အတွက် Fields ထပ်

ကောင်းသောဒေတာဘေ့စဒီဇိုင်းအတွက်လက်မ၏အခြေခံစည်းမျဉ်းကိုထပ်ဒေတာကိုအသိအမှတ်မပြုရန်နှင့်မိမိတို့ကိုယ်ပိုင် table ထဲမှာသူများထပ်ကော်လံထားရန်ဖြစ်ပါသည်။ စားပွဲတစ်ခုအတွက်လယ်ကွင်းထပ်စာရင်းဇယားများ၏ကမ္ဘာမှလာကြပြီသောသူတို့အဘို့ဘုံဖြစ်တယ်, ဒါပေမဲ့စာရင်းဇယားပုံစံဒီဇိုင်းအားဖြင့်အပြားဖြစ်လေ့နေစဉ်, databases ကို relational ဖြစ်သင့်သည်။ ဒါဟာ 3D မှ 2D ကနေသွားတူသောပါပဲ။

ကံကောင်းတာကထပ်တလဲလဲဖော်ပြသော, လယ်ကွင်းများသောအားဖြင့်ဆိုတာတွေ့ရဖို့လွယ်ကူပါတယ်။ ဒီစားပွဲ၌ကြည့်ယူ:

OrderID Product1 Product2 Product3
1 Teddy Bear Jelly Bean
2 Jelly Bean

အမိန့်လေးထုတ်ကုန်များပါဝင်သည်တဲ့အခါဘာဖြစ်သွားမလဲ ကျနော်တို့ထက်ပိုသုံးထုတ်ကုန်ကိုထောကျပံ့ဖို့စားပွဲမှအခြားသောလယ် ​​add ဖို့လိုအပ်လိမ့်မယ်။ ငါတို့ input ကိုဒေတာကိုကူညီရန်အတွက်စားပွဲပတ်လည်တစ်ဦးကို client application ကိုတညျဆောကျတော့လျှင်, ငါတို့သည်ထုတ်ကုန်အသစ်လယ်ပြင်နှင့်အတူကပြုပြင်မွမ်းမံရန်လိုအပ်ပေမည်။ ငါတို့သည်အဘယ်သို့မိန့်ထဲမှာ Jellybeans နှင့်အတူအမိန့်များအားလုံးရှာရမလဲ? နေရာ Product1 = 'Jelly Bean' သို့မဟုတ် Product2 = 'Jelly Bean' သို့မဟုတ် Product3 = 'Jelly Bean' 'ကုန်ပစ္စည်း FROM မှ * SELECT: ကျနော်တို့တူအောင်အံ့သောငှါတစ်ခု SQL ကြေညာချက်နှင့်အတူ table ထဲမှာရှိသမျှထုတ်ကုန်လယ်ကွင်း query ရန်အတင်းအကျပ်ခိုင်းစေကြလိမ့်မည်။

အဲဒီအစားအတူတူအချက်အလက်တွေအားလုံးကို stuffs ကြောင်းတစ်ခုတည်းစားပွဲပေါ်မှာရှိခြင်း၏, ငါတို့တစ်ဦးချင်းစီအချက်အလက်များ၏ကွဲပြားအပိုင်းအစကိုင်သုံးစားပွဲရှိသင့်ပါတယ်။ ဒီဥပမာထဲမှာ, ငါတို့သည်အမိန့်သူ့ဟာသူအကြောင်းသတင်းအချက်အလက်နှင့်အတူကျွန်တော်တို့ရဲ့ထုတ်ကုန်များနှင့်အမိန့်မှထုတ်ကုန်နှင့်ဆက်စပ်ကြောင်း ProductOrders တက်ဘလက်ရှိသမျှနှင့်အတူတစ်ကုန်ပစ္စည်းများစားပွဲပေါ်မှာတစ်ခုအမိန့်စားပွဲပေါ်မှာချင်လိမ့်မယ်။

OrderID CustomerID အမိန့်နေ့စွဲ စုစုပေါငျး
1 7 1/24/17 19,99
2 9 1/25/17 24,99
ProductID ကုန်ပစ္စည်း ရေတွက်
1 Teddy Bear 1
2 Jelly Bean 100 အ
ProductOrderID ProductID OrderID
101 1 1
102 2 1

တစ်ဦးချင်းစီစားပွဲ၎င်း၏ကိုယ်ပိုင်ထူးခြားတဲ့ ID ကိုလယ်ပြင်ရှိပါတယ်ဘယ်လောက်သတိပြုပါ။ ဒါကအဓိကသော့ချက်ဖြစ်ပါတယ်။ ကျနော်တို့အခြား table ထဲမှာနိုင်ငံခြားသော့ချက်အဖြစ်မူလတန်း key ကိုတနျဖိုးကို အသုံးပြု. စားပွဲသို့လင့်ထားသည်။ မူလတန်းသော့နှင့်နိုင်ငံခြားသော့အကြောင်းပိုမိုဖတ်ပါ။

ဒေတာဘေ့စအမှား # 2: တစ်စားပွဲတင်တစ်စားပွဲတင်တစ်သားတည်းဖြစ်စေ

ဤသည်အခြားဘုံအမှားဖြစ်တယ်, ဒါပေမဲ့အမြဲတမ်းထပ်တလဲလဲလယ်ကွင်းအဖြစ်အတော်လေးအဖြစ်အများကြီးထွက်မခံမရပ်ပါဘူး။ ဒေတာဘေ့စဒီဇိုင်းအခါ, သငျသညျစားပွဲတစ်ခုအတွက်အချက်အလက်များ၏အားလုံးကိုယ်နှိုက်မှပြောပြတယ်သေချာအောင်ချင်တယ်။ ဒါဟာကွဲပြားခြားနားသောအရာကိုအစက်စက်ကျခြင်းတို့ဖြစ်ပါသည်အကြောင်းကိုကြောင့်ကလေး၏ဂိမ်းနဲ့တူရဲ့။ သင်တစ်ဦးငှက်ပျောတစ်ဦးစတော်ဘယ်ရီ, တစ်မက်မွန်နှင့်ရုပ်မြင်သံကြားအစုံရှိပါကရုပ်မြင်သံကြားအစုံဖြစ်ကောင်းတစ်နေရာတခြားပိုင်။

သငျသညျရောင်းအားလူမျိုး၏စားပွဲတစ်ခုရှိပါကတူညီသောလိုင်းများတလျှောက်တွင်, ထိုစားပွဲအတွက်သတင်းအချက်အလက်အားလုံးကြောင်းရောင်းအားလူတစ်ဦးမှအထူးဆက်စပ်သငျ့သညျ။ ကြောင်းရောင်းအားလူတစ်ဦးမှထူးခြားသောမဟုတ်ကြောင်းမဆိုအပိုအချက်အလက်သည်သင်၏ဒေတာဘေ့စအတွက်တစ်နေရာရာတခြားပိုင်ပေမည်။

SalesID ပဌမ နောက်ဆုံး လိပ်စာ ဖုန်းနံပါတ် ရုံး OfficeNumber
1 ဆမ် Elliot 118 ပင်မ St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 အဲလစ် Smith က 504 2nd လမ်း, နယူးယောက်, နယူးယော့ (211) 122-1821 New York က (အရှေ့) (211) 855-4541
3 ဂျိုး စီရင်စုနယ် 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

ဒါကြောင့်တစ်ဦးချင်းစီ salesperson အားလုံးကိုဆက်စပ်ဖြစ်ပါတယ်တူဒီစားပွဲပေါ်မှာကြည့်ရှုစေခြင်းငှါ, နေစဉ်, ကတကယ်စားပွဲအတွင်း embedded စားပွဲတစ်ခုရှိပါတယ်။ "အော်စတင် Downtown" နဲ့ဘယ်လို Office နဲ့ OfficeNumber ထပ်သတိပြုပါ။ အဘယ်အရာကိုတစ်ရုံးဖုန်းနံပါတ်အပြောင်းအလဲများကိုဆိုရငျကော သငျသညျအကောင်းတစ်ဦးအရာကိုဘယ်တော့မှဖြစ်သည့်သတင်းအချက်အလက်ပြောင်းလဲများထဲမှတစ်ခုတည်းအပိုင်းအစများအတွက်အချက်အလက်များ၏တစ်ခုလုံး set ကို update လုပ်ဖို့လိုအပ်လိမ့်မယ်။ အဆိုပါနယ်ပယ်မိမိတို့ကိုယ်ပိုင်စားပွဲပေါ်မှာသို့ပြောင်းရွှေ့သင့်ပါတယ်။

SalesID ပဌမ နောက်ဆုံး လိပ်စာ ဖုန်းနံပါတ် OfficeID
1 ဆမ် Elliot 118 ပင်မ St, Austin, TX (215) 555-5858 1
2 အဲလစ် Smith က 504 2nd လမ်း, နယူးယောက်, နယူးယော့ (211) 122-1821 2
3 ဂျိုး စီရင်စုနယ် 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID ရုံး OfficeNumber
1 Austin Downtown (212) 421-2412
2 New York က (အရှေ့) (211) 855-4541

ဒီဇိုင်း၏ဤအမျိုးအစားလည်းသင်ရောင်းအားလူတစ်ဦး table ထဲမှာစုပြုံပြွတ်သိပ်နေတဲ့အိပ်မက်ဆိုးကိုမရှိဘဲရုံးစားပွဲမှနောက်ထပ်သတင်းအချက်အလက်ကိုထည့်သွင်းဖို့စွမ်းရည်ကိုပေးသည်။ သတင်းအချက်အလက်အပေါငျးတို့သရောင်းအားလူတစ်ဦး table ထဲမှာခဲ့လျှင်ရိုးရိုးလမ်းပေါ်မှာလိပ်စာ, မြို့, ပြည်နယ်နှင့်ဇစ်ကုဒ်ခြေရာခံစောင့်ရှောက်ဖို့ပါလိမ့်မယ်ဘယ်လောက်အလုပ်မြင်ယောင်ကြည့်ပါ!

ဒေတာဘေ့စအမှား # 3: တစ်လူပျိုလယ်သို့ပြန်ကြားရေးနှစ်ဦးသို့မဟုတ်ပိုပိုငျးပိုငျးခြင်း

အရောင်းလူတစ်ဦးစားပွဲသို့ရုံးသတင်းအချက်အလက်မြှုပ်ထားခြင်းကြောင့်ဒေတာဘေ့စနှင့်အတူတစ်ခုတည်းသောပြဿနာမဟုတ်ခဲ့ပေ။ လမ်းပေါ်မှာလိပ်စာ, မြို့နှင့်ပြည်နယ်: အဆိုပါလိပ်စာလယ်ပြင်သုံးသတင်းအချက်အလက်ကိုအပိုင်းပိုင်းပါရှိသည်။ database တွင်တစ်ဦးချင်းစီကိုလယ်သာအချက်အလက်များ၏တဦးတည်းတစ်ခုတည်းအပိုင်းအစဆံ့သငျ့သညျ။ သငျသညျတစျခုတညျးသောလယ်၌သတင်းအချက်အလက်မျိုးစုံကိုအပိုင်းပိုင်းရှိသောအခါ, သတင်းအချက်အလက်များအတွက်ဒေတာဘေ့စ query ခက်လာနိုင်ပါတယ်။

ဥပမာအားဖြင့်, အဘယ်အရာကိုကျနော်တို့ Austin ကနေအားလုံးရောင်းအားကလူအပေါ်တစ်ဦးစုံစမ်းမှုကို run ချင်တယ်ဆိုရင်? ကျနော်တို့မသာမတတ်နိုင်သောအရာလိပ်စာလယ်အတွင်းရှာဖွေဖို့လိုအပ်လိမ့်မယ်, ဒါပေမယ့်မကောင်းတဲ့သတင်းအချက်အလက်ပြန်လာနိုင်ပါတယ်။ တစ်စုံတစ်ဦးကလက်ပံ, အော်ရီဂွန်ပြည်နယ် Austin လမ်းပေါ်မှာနေထိုင်ခဲ့ပါလျှင်ပြီးနောက်ရှိသမျှတို့, ဘာဖြစ်သွားမလဲ

ဤတွင်စားပွဲပေါ်မှာတူသငျ့သညျအဘယျသို့င်:

SalesID ပဌမ နောက်ဆုံး လိပ်စာ: 1 Address2 မြို့ ပြည်နယ် zip ဖုန်းနံပါတ်
1 ဆမ် Elliot 118 ပင်မစိန့် Austin TX 78720 2155555858
2 အဲလစ် Smith က 504 2nd စိန့် နယူးယောက် နယူးယော့ 10022 2111221821
3 ဂျိုး စီရင်စုနယ် 428 Aker စိန့် apt 304 Austin TX 78716 2155455545

ဤနေရာတွင်မှတ်သားရန်အရာစုံတွဲတစ်တွဲရှိတယ်။ ပထမဦးစွာ "Address1" နှင့် "Address2" ဟုထပ်တလဲလဲလယ်ကွင်းအမှားအောက်မှာလဲကြပုံပေါ်လိမ့်မယ်။

သို့သော်ဤအမှု၌သူတို့ရောင်းအားလူတစ်ဦးထက်၎င်း၏ကိုယ်ပိုင် table ထဲမှာသွားသင့်ကြောင်းအချက်အလက်များ၏တစ်ထပ်ကျော့အုပ်စုတိုက်ရိုက်ဆက်စပ်ကြောင်းအချက်အလက်များ၏သီးခြားအပိုင်းပိုင်းကိုရည်ညွှန်းကြသည်။

ဒါ့အပြင်ရှောင်ရှားရန်တစ်ဆုကြေးငွေအမှားအတိုင်း, ဖုန်းနံပါတ်များအတွက်ပုံစံချပေးစားပွဲထဲကကိုချွတ်ထားပြီးဘယ်လောက်သတိထားမိ။ သငျသညျရသောအခါမှာအားလုံးဖြစ်နိုင်သမျှလယ်ကွင်းများ၏ပုံစံကိုသိုလှောင်ကိုရှောင်ရှားသင့်ပါတယ်။ 215-555-5858 သို့မဟုတ် (215) 555-5858: ဖုန်းနံပါတ်၏ဖြစ်ရပ်မှာတော့လူတွေဖုန်းနံပါတ်တစ်ခုရေးဖို့မျိုးစုံနည်းလမ်းတွေရှိပါတယ်။ ဤသည်၎င်းတို့၏ဖုန်းနံပါတ်ကရောင်းအားလူတစ်ဦးရှာဖွေနေသို့မဟုတ်တူညီသောဧရိယာကုဒ်အတွက်ရောင်းအားကလူတစ်ဦးရှာဖွေရေးလုပ်နေတာပိုပြီးခက်ခဲစေလိမ့်မည်။

ဒေတာဘေ့စအမှား # 4: တစ်မှန်ကန်သောမူလတန်း Key ကိုအသုံးပြုခြင်းမဟုတ်ပါ

အများဆုံးဖြစ်ရပ်အတွက်, သင်သည်သင်၏မူလတန်းသော့ချက်တစ်ခုအလိုအလြောကျ incrementing နံပါတ်သို့မဟုတ်အချို့သောအခြားထုတ်လုပ်ပြီးနံပါတ်သို့မဟုတ်အက္ခရာနံပါတ်ပါတဲ့သုံးလိုပါလိမ့်မယ်။ သင်ကအကောင်းတစ်ဦးအမှတ်အသားလုပ်လိမ့်မယ်နဲ့တူပါကအသံပင်လျှင်အဓိကသော့ချက်ဘို့ကိုမဆိုအမှန်တကယ်သတင်းအချက်အလက်သုံးပြီးရှောင်ရှားသင့်ပါတယ်။

ဥပမာအားဖြင့်ကျနော်တို့တစ်ဦးချင်းစီကျွန်တော်တို့ရဲ့ကိုယ်ပိုင်တစ်ဦးချင်းလူမှုရေးလုံခြုံရေးနံပါတ်ရှိသည်, ဒါကြောင့်တစ်ဦးဝန်ထမ်းဒေတာဘေ့စများအတွက်လူမှုလုံခြုံရေးနံပါတ်သုံးပြီးကောင်းတစ်စိတ်ကူးကဲ့သို့မြည်ပါလိမ့်မယ်။ ဒါပေမယ့်ရှားပါးနေချိန်မှာပင်လူမှုလုံခြုံရေးနံပါတ်ပြောင်းလဲပစ်ရန်အဘို့အဖြစ်နိုင်မယ့်, ကြှနျုပျတို့ပြောင်းလဲမှုမှကျွန်တော်တို့ရဲ့အဓိကသော့ချက်ချင်ခဲ့ပါဘူး။

ထိုသော့တန်ဖိုးကိုအဖြစ်အမှန်တကယ်သတင်းအချက်အလက်ကို အသုံးပြု. အတူပြဿနာဖြစ်ပါတယ်။ ဒါဟာပြောင်းလဲနိုင်သည်။

ဒေတာဘေ့စအမှား # 5: နာမည်တစ်ခုကွန်ဗင်းရှင်းကိုသုံးပြီးမ

ဒါဟာသင်ပထမဦးဆုံးသင့်ရဲ့ဒေတာဘေ့စဒီဇိုင်းစတင်ရန်တဲ့အခါကြီးမားတဲ့သဘောတူညီချက်ကဲ့သို့မြည်, သင်မူကား, သတင်းအချက်အလက်ရယူရန်ဒေတာဘေ့စဆန့်ကျင်မေးမြန်းချက်ရေးသားခြင်းကိုသင်လယ်ကွင်းအမည်များကိုအလွတ်ကျက်အဖြစ်အမည်ပေးခြင်းစည်းဝေးကြီးတစ်ခုကိုကူညီပေးပါမည်ရှိခြင်း၏အမှတ်ရတစ်ချိန်ကမပြုစေခြင်းငှါ။

ရုံ, ဘယ်လောက်ထက်ပိုခက်ခဲအမည်များကိုတဦးတည်းစားပွဲနှင့် FIRST_NAME အတွက် FIRSTNAME, LastName အဖြစ်သိမ်းဆည်းထားခဲ့ကြသည်လျှင်ဖြစ်စဉ်ကိုဖြစ်လိမ့်မယ်လို့အခြား table ထဲမှာ LAST_NAME မြင်ယောင်ကြည့်ပါ။

နှစ်ခုလူကြိုက်အများဆုံးအမည်ပေးခြင်းစည်းဝေးကြီးများသည်ထိုလယ်၌ရှိသမျှသောစကားလုံးရဲ့ပထမဦးဆုံးအက္ခရာရင်းနှီးမြှုပ်နှံဒါမှမဟုတ် underscore ကို အသုံးပြု. စကားလုံးများကိုခွဲထုတ်ရသည်။ FIRSTNAME, lastName: သင်လည်းအချို့သော developer များပထမဦးဆုံးစကားလုံး မှလွဲ. တိုင်းစကားလုံးရဲ့ပထမဦးဆုံးအက္ခရာရင်းနှီးမြှုပ်နှံမြင်ရလိမ့်မည်။

သင်တို့သည်လည်းအနည်းကိန်းစားပွဲပေါ်မှာအမည်များသို့မဟုတ်အများကိန်းစားပွဲပေါ်မှာအမည်များကို အသုံးပြု. အပေါ်ဆုံးဖြတ်ချင်ပါလိမ့်မယ်။ ဒါကြောင့်တစ်ဦးအမိန့်စားပွဲပေါ်မှာသို့မဟုတ်တစ်ခုအမိန့်စားပွဲပေါ်မှာလား? ကဖောက်သည်စားပွဲပေါ်မှာသို့မဟုတ် Customer များစားပွဲပေါ်မှာလား? တနည်းကား, သင်တစ်ဦးအမိန့်စားပွဲပေါ်မှာနှင့် Customer များစားပွဲပေါ်မှာအတူ flyer ခံရဖို့မလိုချင်ကြဘူး။

သင်ရွေးချယ်အဆိုပါအမည်ပေးခြင်းစည်းဝေးကြီးတစ်ခုကိုအမှန်တကယ်ရွေးချယ်ရာတွင်နှင့်တစ်ဦးအမည်ပေးခြင်းစည်းဝေးကြီးကပ်၏လုပ်ငန်းစဉ်အဖြစ်အရေးမပါသည်။

ဒေတာဘေ့စအမှား # 6: မသင့်လျော် Indexing

indexing အထူးသဖြင့်ဒေတာဘေ့စဒီဇိုင်းမှာအသစ်သောသူတို့အဘို့, လက်ျာဘက်ရရှိရန်အခက်ခဲဆုံးအရာတစ်ခုဖြစ်သည်။ အားလုံးမူလတန်းသော့နှင့်နိုင်ငံခြားသော့ရည်ညွှန်းရပါမည်။ ဤရွေ့ကားဤမျှတစ်ဦးအညွှန်းကိန်းမပါဘဲ, သင်သည်သင်၏ဒေတာဘေ့စထဲကအလွန်ဆင်းရဲစွမ်းဆောင်မှုကိုမြင်ရပါလိမ့်မယ်အတူတူအဘယ်အရာကို link ကိုစားပွဲဖြစ်ကြသည်။

သို့သော်လည်းအဘယ်သို့လည်းမကြာခဏလွဲချော်နေကြအခြားလယ်ကွက်ရှိပါတယ်။ ဤ "နေရာ" လယ်ကွင်းဖြစ်ကြသည်။ သင်မကြာခဏတစ်ဦး WHERE clause အတွက်လယ်ကို အသုံးပြု. သင်၏ရှာဖွေမှုကျဉ်းမြောင်းသွားနေတယ်ဆိုရင်, သင်လယ်ကွင်းတခုတခုအပေါ်မှာအညွှန်းကိန်းချပြီးစဉ်းစားချင်တယ်။ သို့သျောလညျးသငျသညျမြားကိုလညျးစွမ်းဆောင်ရည်ကိုထိခိုက်စေနိုင်သော, အလွန်အမင်းညွှန်းကိန်းဇယားကိုမှမလိုချင်ကြဘူး။

ဘယ်လိုဆုံးဖြတ်လဲ? ဒါကဒေတာဘေ့စဒီဇိုင်းအနုပညာ၏အစိတ်အပိုင်းတစ်ခုဖြစ်ပါတယ်။ သငျသညျစားပွဲတစ်ခုပေါ်တွင်တင်သင့်ပါတယ်မည်မျှအညွှန်းကိန်းအပေါ်အဘယ်သူမျှမခက်ကန့်သတ်ရှိပါတယ်။ အဓိကအားဖြင့်, သင်အညွှန်းကိန်းမှမကြာခဏတစ်ဦး WHERE clause အတွက်အသုံးပြုသည်ဆိုလယ်ကွင်းချင်တယ်။ စနစ်တကျသင့်ရဲ့ဒေတာဘေ့စအညွှန်းထည့်နေပုံကိုအကြောင်းပိုမိုဖတ်ပါ။