Skip to content
GitHub

Understanding Data Values and Nulls

Database နှင့်ပတ်သက်တဲ့အခါ မကြာခဏ အချင်းချင်းဖလှယ်ပြီး သုံးတတ်ကြပေမယ့် တိကျတဲ့အဓိပ္ပာယ်တွေ ရှိကြတဲ့ အခြေခံသဘောတရား နှစ်ခုဖြင့်စလိုက်ရအောင်။

Data ဆိုတာ Database ထဲမှာ သိမ်းဆည်းထားတဲ့ ဘာမှ ပြုပြင်မထားရသေးတဲ့ အချက်အလက် (raw facts) တွေကို ဆိုလိုပါတယ်။ ဒါတွေက ကိန်းဂဏန်း၊ ရက်စွဲ၊ နာမည်၊ စာသား ဒါမှမဟုတ် တိုင်းတာနိုင်သည့် တန်ဖိုးတစ်ခုခု ဖြစ်နိုင်ပါတယ်။ သူ့ချည်းသက်သက်ဆိုရင်တော့ အဓိပ္ပာယ်ပြည့်စုံစွာ မဖော်ပြနိုင်ပါဘူး။

ဥပမာ - အောက်ပါ row of data ကို စဉ်းစားကြည့်ပါ။

Alice    2480284    05/09/2005    85.00

ဒီအတိုင်းကြည့်လိုက်ရင် ကျွန်တော်တို့ ဘာမှ တိတိကျကျ ပြောလို့မရပါဘူး။

  • 2480284 ဆိုတာ ဘာကို ဆိုလိုတာလဲ။ customer ID လား၊ product code လား၊ ဒါမှမဟုတ် တခြားတစ်ခုခုလား။ Alice နှင့် ဆက်စပ်မှု ရှိသလား။
  • 85.00 ကရော ဘာကို ကိုယ်စားပြုတာလဲ။ ရမှတ် (score) လား၊ ငွေပေးချေမှု (payment) လား၊ ရာခိုင်နှုန်း (percentage) လား။ အကြောင်းအရာ (context) မရှိဘဲနှင့် ဒါတွေဟာ အဓိပ္ပာယ်မဖော်နိုင်တဲ့ အချက်အလက်(raw data) သက်သက်ပဲ ဖြစ်ပါတယ်။ အဲဒီအချက်အလက်တွေကို စနစ်တကျ စီမံခန့်ခွဲပြီး (process) မှသာ သူတို့ရဲ့ အဓိပ္ပာယ်ကို နားလည်နိုင်မှာ ဖြစ်ပါတယ်။

သတင်းအချက်အလက် - Information (အဓိပ္ပာယ်ရှိသော data)

Section titled “သတင်းအချက်အလက် - Information (အဓိပ္ပာယ်ရှိသော data)”

သတင်းအချက်အလက် (Information) ဆိုတာကတော့ အဲဒီ Data အစိမ်းသက်သက်တွေကို အဓိပ္ပာယ်ရှိပြီး အသုံးဝင်လာအောင် ပြုပြင်စီမံထားတဲ့ data တွေပဲ ဖြစ်ပါတယ်။ အဓိက မှတ်သားထားရမှာကတော့ ကျွန်တော်တို့ဟာ data တွေကို အဓိပ္ပာယ်ရှိတဲ့ သတင်းအချက်အလက်အဖြစ် ပြောင်းလဲနိုင်ဖို့ တစ်နည်းနည်းဖြင့် စီမံဆောင်ရွက်ရမယ် ဆိုတာပါပဲ။


အဲဒီ “Alice    2480284    05/09/2005    85.00” ဆိုတဲ့ data ကို “ကျောင်းသားစာရင်း” ဆိုတဲ့ table ထဲမှာ ထည့်လိုက်ပြီး “ကျောင်းသားအမည် (Student Name)”၊ “ကျောင်းသား ID (Student ID)”၊ “မွေးနေ့ (Date of Birth)”၊ “ရမှတ် (Score)” စတဲ့ ခေါင်းစဉ်တွေနှင့် စနစ်တကျ ထားလိုက်တယ်ဆိုပါစို့။ အဲဒီအခါမှာ “Alice” က ကျောင်းသားနာမည်၊ “2480284” က ကျောင်းသား ID၊ “05/09/2005” က မွေးနေ့၊ “85.00” က ရမှတ်ဆိုပြီး အဓိပ္ပာယ်ရှင်းသွားပါပြီ။ ဒီလို အဓိပ္ပာယ်ရှင်းသွားတဲ့အခါ “Alice ဆိုတဲ့ ကျောင်းသားဟာ ID နံပါတ် 2480284 ရှိပြီး 2005 ခုနှစ် မေလ ၉ ရက်နေ့မှာ မွေးတယ်။ စာမေးပွဲမှာ ၈၅ မှတ်ရခဲ့တယ်” ဆိုတဲ့ အသုံးဝင်တဲ့ သတင်းအချက်အလက်တစ်ခု ဖြစ်သွားပါပြီ။


အချက်အလက် (Data) နှင့် သတင်းအချက်အလက် (Information) တို့ရဲ့ ကွာခြားချက်ကို နားလည်ထားဖို့ အရေးကြီးပါတယ်။ database တွေဆိုတာကလည်း raw data တွေကို သိမ်းဆည်းဖို့သက်သက် မဟုတ်ဘဲ လုပ်ငန်း ဒါမှမဟုတ် အဖွဲ့အစည်းအတွက် အဓိပ္ပာယ်ရှိပြီး အသုံးဝင်တဲ့ သတင်းအချက်အလက်(information)တွေ ပြန်ထုတ်ပေးနိုင်ဖို့အတွက် ဒီဇိုင်းဆွဲထားရန် လိုအပ်ပါတယ်။

အချက်အလက် (Data) ဆိုတာ ကျွန်တော်တို့သိမ်းဆည်းထားတဲ့ အရာဖြစ်ပါတယ်။

သတင်းအချက်အလက် (Information) ဆိုတာ ကျွန်တော်တို့ပြန်လည်ထုတ်ယူသုံးစွဲတဲ့ အရာဖြစ်ပါတယ်။

Database မှာ Null ဆိုတာ “Data မရှိခြင်း”၊ “ပျောက်ဆုံးနေခြင်း” ဒါမှမဟုတ် “မသိရှိသေးခြင်း” ကို ကိုယ်စားပြုပါတယ်။ Null ဟာ သုည (zero) လည်း မဟုတ်ပါဘူး။ နေရာလွတ် (blank) လည်း မဟုတ်ပါဘူး၊ ဗလာ (empty) လည်း မဟုတ်ပါဘူး။ တကယ်ကို မရှိတာ (truly absent) ကို ဆိုလိုတာဖြစ်ပါတယ်။

နားလည်မှုအလွဲများ

Section titled “နားလည်မှုအလွဲများ”

0 (zero)

Zero ဆိုတာ တိကျတဲ့ ကိန်းဂဏန်းတန်ဖိုးတစ်ခုဖြစ်ပါတယ်။ ဥပမာ - ဘဏ်အကောင့်ထဲမှာ ပိုက်ဆံ 0 ကျပ်ပဲ ကျန်တော့တာ၊ ကုန်ပစ္စည်းစတော့ 0 (stock level = 0) ဖြစ်တာမျိုးကို ကိုယ်စားပြုနိုင်ပါတယ်။ ဆိုလိုတာက 0 ဟာ “မရှိတာ”၊ “တန်ဖိုးမသိတာ” မဟုတ်ဘဲ မဟုတ်ဘဲ “တန်ဖိုးက 0” ဖြစ်တယ်လို့ တိတိကျကျ ဖော်ပြတာဖြစ်ပါတယ်။

Blank Space

နေရာလွတ် (space) တစ်ခု ဒါမှမဟုတ် တစ်ခုထက်ပိုတဲ့ space တွေဟာ ကျွန်တော်တို့အများစုအတွက် အဓိပ္ပာယ်မရှိဘူးလို့ ထင်ရပါတယ်။ ဒါပေမဲ့ SQL လိုမျိုး query language တွေအတွက်တော့ အဓိပ္ပာယ်ရှိပါတယ်။ SQL က blank space ဆိုတာကို မှန်ကန်တဲ့ character (စာလုံး) တစ်ခုအဖြစ် လက်ခံပါတယ်။ ဒါဟာ “တန်ဖိုးမရှိတာ” မဟုတ်ဘဲ “နေရာလွတ်(space)” ဆိုတဲ့ တန်ဖိုးရှိနေတာဖြစ်ပါတယ်။

Zero-length String

စာလုံးလုံးဝမပါဝင်တဲ့ string (single quote နှစ်ခုကြားထဲမှာ space လုံးဝမပါတာ) ဟာလည်း SQL လို ဘာသာစကားတွေအတွက် လက်ခံနိုင်တဲ့ တန်ဖိုးတစ်ခုပဲဖြစ်ပါတယ်။ ဒါဟာ “စာလုံးမပါတဲ့ string” ဆိုတဲ့ တန်ဖိုးကို ပိုင်ဆိုင်ပါတယ်။ Null လို “မရှိ” တာမျိုး မဟုတ်ပါဘူး။

Null ကတော့ အချက်အလက် လုံးဝမရှိခြင်း/မသိရှိခြင်း ကိုကိုယ်စားပြုပါတယ်။

ဥပမာ - customer တစ်ယောက်ရဲ့ ဖုန်းနံပါတ်ကို မဖြည့်ထားဘူးဆိုရင် အဲဒီနေရာမှာ Null ကိုသုံးနိုင်ပါတယ်။ ဒါဟာ “ဖုန်းနံပါတ်က 0” လို့ ပြောတာလည်းမဟုတ်၊ “ဖုန်းနံပါတ်က Space” လို့ ပြောတာလည်းမဟုတ်ဘဲ “ဖုန်းနံပါတ်ကို မသိသေး/မရှိသေး” လို့ ဆိုလိုတာပါ။

ဒါကြောင့် Null, 0, ’ ’ နှင့် ” တို့ဟာ မတူညီတဲ့ အဓိပ္ပာယ်တွေ ရှိကြပါတယ်။ Null ဟာ အချက်အလက်မရှိတာ၊ မသိသေးတာကို ကိုယ်စားပြုပြီး ကျန်တာတွေကတော့ တန်ဖိုးတစ်ခုခု ရှိနေတာကို ကိုယ်စားပြုပါတယ်။

Null အမျိုးအစားများ

Section titled “Null အမျိုးအစားများ”

တန်ဖိုးတစ်ခုက ဘာကြောင့် Null ဖြစ်နေရတာလဲဆိုတာကို နားလည်ထားတာက data အရည်အသွေးနှင့် ခွဲခြမ်းစိတ်ဖြာမှုအတွက် အရေးကြီးပါတယ်။

၁။ ပျောက်နေသော တန်ဖိုးများ (Missing Values)

Section titled “၁။ ပျောက်နေသော တန်ဖိုးများ (Missing Values)”

အများအားဖြင့် မေ့လျော့တာ၊ data ထည့်သွင်းစဉ် လူရဲ့အမှားအယွင်းကြောင့် ဒါမှမဟုတ် data စုဆောင်းတဲ့ လုပ်ငန်းစဉ် မပြည့်စုံတာတွေကြောင့် ဖြစ်တတ်ပါတယ်။

ဥပမာ - ဝန်ထမ်းတစ်ယောက်က Customer တစ်ယောက်ရဲ့ ကိုယ်ရေးအချက်အလက်ကို စာရင်းသွင်းတုန်းက Email ကို ထည့်ဖို့မေ့သွားလို့ Email field မှာ Null ဖြစ်နေတာမျိုး။

၂။ မသိသေးသော တန်ဖိုးများ (Unknown Values)

Section titled “၂။ မသိသေးသော တန်ဖိုးများ (Unknown Values)”

တန်ဖိုးတစ်ခုရှိတာတော့ သေချာပေမယ့် data record(row) တစ်ခုကို ဖန်တီးချိန် ဒါမှမဟုတ် ပြင်ဆင်(update) တဲ့အချိန်မှာ အဲဒီတန်ဖိုးက ဘာလဲဆိုတာ မသိသေးတာ ဒါမှမဟုတ် မရရှိသေးတာကို ဆိုလိုပါတယ်။ ဥပမာ - Project အသစ်တစ်ခုအတွက် Budget ချပေးမှာ သေချာပေမယ့် ဘယ်လောက်ဆိုတာကတော့ တိတိကျကျ အတည်ပြုရသေးတဲ့အခါ Budget Field ကို လောလောဆယ် NULL လို့ ထားပြီး နောက်မှ ဖြည့်တာမျိုး။

တွက်ချက်မှုများနှင့် query များတွင် Null ၏ အခန်းကဏ္ဍ

Section titled “တွက်ချက်မှုများနှင့် query များတွင် Null ၏ အခန်းကဏ္ဍ”

Database တွေက Null တွေကို ကိုင်တွယ်တဲ့အခါမှာ မတူညီတဲ့စည်းကမ်းတွေ ရှိပါတယ်။ အထူးသဖြင့် သင်္ချာဆိုင်ရာဂဏန်းတွက်ချက်မှုတွေ (mathematical operations) နှင့် အချက်အလက်မေးမြန်းထုတ်ယူမှုတွေ (queries) မှာ ဖြစ်ပါတယ်။

Null တွေပါဝင်နေတဲ့ တန်ဖိုးတွေကို သင်္ချာနည်းအရ တွက်ချက်ကြည့်မယ်ဆိုရင် (ဥပမာ- ပေါင်းတာ ဒါမှမဟုတ် ပျမ်းမျှရှာတာ) ရလဒ်က null ဖြစ်သွားနိုင်သလို null တွေကို သေချာဂရုစိုက်ပြီး မကိုင်တွယ်ဘူးဆိုရင် မှားယွင်းတဲ့ ရလဒ်တွေ ထွက်လာနိုင်ပါတယ်။

OperationResult
NULL + 1NULL
5 > NULLNULL
NULL = NULLNULL (not true)
NULL IS NULLTRUE

NULL = NULL → NULL (မသိရသေးတဲ့ တန်ဖိုးနှစ်ခုဟာ တူညီလား၊ မတူညီဘူးလားဆိုတာ ကျွန်တော်တို့ မသိနိုင်လို့ပါ။)
NULL > 5 → NULL (NULL ကဘာလဲဆိုတာ ကျွန်တော်တို့ အတိအကျမသိနိုင်တဲ့အတွက် 5 နှင့် မနှိုင်းယှဥ်နိုင်လို့ပါ။)

NULL ပါဝင်တဲ့ မည်သည့် သင်္ချာတွက်ချက်မှုမဆို NULL ကိုပဲ ပြန်ပေးပါတယ်။

10 + NULL → NULL
'Hello' || NULL → NULL
ဘာကြောင့်လဲဆိုတော့ ကျွန်တော်တို့ဟာ သိရှိပြီးသား တန်ဖိုးတစ်ခု (known value) နှင့် မသိရှိရသေးတဲ့ တန်ဖိုးတစ်ခု (unknown value) ကို ပေါင်းစပ်လိုက်တဲ့အခါ ရလဒ်ကလည်း မသိရှိနိုင်တဲ့ တန်ဖိုးအဖြစ်ပဲ ဆက်လက်တည်ရှိနေလို့ပဲ ဖြစ်ပါတယ်။

SUM, AVG, COUNT လို Function တွေကတော့ Null တွေကို လျစ်လျူရှုပြီး ကျန်တဲ့တန်ဖိုးတွေကိုပဲ တွက်ချက်ပေးပါတယ်။

FunctionBehavior with NULLs
SUM(column)Ignores NULLs
AVG(column)Ignores NULLs
COUNT(column)Counts only non-null values
COUNT(*)Counts all rows, including NULLs

တချို့တန်ဖိုးတွေ မသိရှိရသေးရင်တောင်မှ သိရှိပြီးသား တန်ဖိုးတွေကိုတော့ aggregate လုပ်ဆောင်နိုင်ပါတယ်။

ဥပမာအနေနှင့် ကြည့်ရအောင်။

Section titled “ဥပမာအနေနှင့် ကြည့်ရအောင်။”
NameSalary
Alice1000
Bob1200
Charlienull
Brown900

ဝန်ထမ်းတွေရဲ့ လစာတွေကို မှတ်တမ်းတင်ထားတဲ့ table တစ်ခုရှိတယ်ဆိုပါစို့။ ဝန်ထမ်းအသစ်တစ်ယောက်ကို ခန့်ထားပေမယ့် လစာကို လောလောဆယ် မသတ်မှတ်ရသေးလို့ သူ့လစာ field မှာ Null ဖြစ်နေနိုင်ပါတယ်။

ဒီ table ထဲက ဝန်ထမ်းအားလုံးရဲ့ ပျမ်းမျှလစာကို ရှာမယ် ဆိုပါစို့။ (SQL မှာ AVG() ဆိုတဲ့ function ကို သုံးပြီး ရှာလို့ရပါတယ်။ ဥပမာ- SELECT AVG(Salary) FROM Employees;)

ဒီလိုတွက်ချက်တဲ့အခါ Null ဖြစ်နေတဲ့ လစာကို ထည့်မတွက်ပါဘူး။ ဂဏန်းတန်ဖိုးရှိတဲ့ လစာတွေဖြစ်တဲ့ 1000, 1200, 900 တို့ကိုပဲ ပေါင်းပြီး ဝန်ထမ်း ၃ ယောက်အတွက်ပဲ ပျမ်းမျှရှာမှာ ဖြစ်ပါတယ်။

(1000 + 1200 + 900) / 3 = 1033.33

ဒါကြောင့် Null တွေကို ဘယ်လို ကိုင်တွယ်မလဲဆိုတာက အချက်အလက်တွေ မှန်ကန်တိကျဖို့နှင့် ဆုံးဖြတ်ချက်တွေ ချမှတ်ရာမှာ အရေးပါပါတယ်။ သင်္ချာတွက်ချက်မှုတွေနှင့် query တွေ မလုပ်ခင်မှာ ဘယ် field တွေက Null ဖြစ်နိုင်လဲ၊ Null ဖြစ်ရင် ဘယ်လို ကိုင်တွယ်မလဲဆိုတာကို သေချာ စဉ်းစားထားဖို့ လိုအပ်ပါတယ်။ (ဥပမာ- Null တွေကို 0 ဖြင့် အစားထိုးမလား၊ Null တွေကိုထည့်မတွက်ပဲ လုံးဝချန်လှပ်မလား စသည်ဖြင့်)

Null အတွက် ဒီဇိုင်းဆိုင်ရာ ထည့်သွင်းစဉ်းစားချက်များ

Section titled “Null အတွက် ဒီဇိုင်းဆိုင်ရာ ထည့်သွင်းစဉ်းစားချက်များ”

Database ကို ဒီဇိုင်းဆွဲရာတွင် filed တစ်ခုစီအတွက် Null တွေရဲ့ သက်ရောက်မှုတွေကို ထည့်သွင်းစဉ်းစားဖို့ မရှိမဖြစ်လိုအပ်ပါတယ်။

  • ဒီ field က တကယ်ပဲ Null ဖြစ်နိုင်သလား။ (ဥပမာ- customer တစ်ယောက်မှာ ဖုန်းနံပါတ်မရှိတာမျိုး ဖြစ်နိုင်သလား။)
  • ဒီ field ကို Null တန်ဖိုးလက်ခံဖို့ ခွင့်ပြုသင့်သလား။ (ဥပမာ- ကုန်ပစ္စည်းကုတ်နံပါတ် (product ID) က Null ဖြစ်လို့ ရသလား။)
  • Null တွေ ပါဝင်နေတာက သင့်ရဲ့ query တွေ၊ တွက်ချက်မှုတွေ ဒါမှမဟုတ် report တွေအပေါ် ဘယ်လို သက်ရောက်မှု ရှိနိုင်လဲ။ (ဥပမာ- AVG() function ကို သုံးရင် တချို့တန်ဖိုးတွေ Null ဖြစ်နေရင် မျှော်လင့်ထားတဲ့ ရလဒ် ထွက်လာမှာလား။)

ပျောက်နေတဲ့/မရှိတဲ့ တန်ဖိုးတွေ (Missing Values)၊ မသိသေးတဲ့ တန်ဖိုးတွေ (Unknown Values) နှင့် သင်္ချာတွက်ချက်မှုတွေ ဒါမှမဟုတ် Aggregate Function တွေလုပ်ဆောင်ရာတွင် null သက်ရောက်မှုတွေကို သေချာ ထည့်သွင်းစဉ်းစားတာက Database Design ရဲ့ အရေးကြီးတဲ့ အစိတ်အပိုင်းတစ်ခု ဖြစ်ပါတယ်။