SQL အဆင့်မြင့် ခေါင်းစဉ်များ (Transactions, Indexes, Views)
1. Ensuring Reliability - Transactions (လုပ်ငန်းစဉ်များ)
Section titled “1. Ensuring Reliability - Transactions (လုပ်ငန်းစဉ်များ)”Transaction ဆိုတာ Database ထဲမှာ လုပ်ဆောင်မယ့် (Insert, Update, Delete) အလုပ်တွေကို အစုအဝေး တစ်ခု (Single Unit of Work) အနေနဲ့ ပေါင်းစပ်လိုက်တာပါ။
Transaction ရဲ့ အဓိက သဘောတရားက “အကုန်လုံး အောင်မြင်မှ အတည်ပြုမယ်၊ တစ်ခုခု မှားယွင်းသွားရင် အကုန်လုံးကို အရင် မူလအခြေအနေအတိုင်း ပြန်ထားမယ်” (All or Nothing) ဆိုတာပါပဲ။ ဒီလို လုပ်ပေးခြင်းအားဖြင့် Data တွေ မှားယွင်းသွားတာ (Data Inconsistency) မဖြစ်အောင် ကာကွယ်ပေးပါတယ်။
အဓိက Command (၃) ခု:
BEGIN TRANSACTION: (အလုပ်တွေ စတင်ပါပြီလို့ ကြေညာတာ)COMMIT: (လုပ်ဆောင်ချက်တွေ အားလုံး အောင်မြင်တဲ့အတွက် အပြီးတိုင် သိမ်းဆည်းလိုက်တာ)ROLLBACK: (တစ်ခုခု မှားယွင်းသွားလို့ အရင် မူလအခြေအနေကို ပြန်ဆုတ်လိုက်တာ)
ဥပမာ - ဘဏ်အကောင့် ငွေလွှဲခြင်း (Account A မှ B သို့ $500 လွှဲခြင်း)
Section titled “ဥပမာ - ဘဏ်အကောင့် ငွေလွှဲခြင်း (Account A မှ B သို့ $500 လွှဲခြင်း)”ငွေလွှဲတယ်ဆိုတာ နေရာတစ်နေရာကနေ ငွေကို နှုတ်ပြီး၊ နောက်တစ်နေရာကို ပေါင်းထည့်ရတာပါ။ ဒီလုပ်ငန်းစဉ် နှစ်ခုလုံး အောင်မြင်မှသာ ငွေလွှဲတာ အထမြောက်မှာပါ။
BEGIN TRANSACTION;
-- အဆင့် ၁: Account A ကနေ $500 နှုတ်ပါ။UPDATE Accounts SET Balance = Balance - 500 WHERE AccountID = 'A';
-- အဆင့် ၂: Account B ကို $500 ပေါင်းပါ။UPDATE Accounts SET Balance = Balance + 500 WHERE AccountID = 'B';
-- အဆင့်နှစ်ခုလုံး အောင်မြင်မှသာ Data တွေကို အတည်ပြု သိမ်းဆည်းပါမယ်။-- တကယ်လို့ Account B မရှိလို့ Error တက်ခဲ့ရင် Database က အလိုအလျောက် ROLLBACK လုပ်ပြီး Account A က နှုတ်ထားတဲ့ ငွေကို ပြန်ပေါင်းထည့်ပေးသွားပါလိမ့်မယ်။COMMIT;2. Improving Performance - Indexes (လမ်းညွှန်များ)
Section titled “2. Improving Performance - Indexes (လမ်းညွှန်များ)”Index ဆိုတာ Database ရဲ့ Search Engine က Data တွေကို အမြန်ဆုံး ရှာဖွေနိုင်အောင် ကူညီပေးတဲ့ လမ်းညွှန် (Lookup Table) တစ်ခုပါ။
စာအုပ် တစ်အုပ်ရဲ့ အနောက်ဘက်က မာတိကာ (Index) နဲ့ အတူတူပါပဲ။ စကားလုံး တစ်လုံးကို ရှာချင်ရင် စာအုပ်ကို စာမျက်နှာ တစ်ရွက်ချင်းစီ လှန်ရှာစရာ မလိုဘဲ၊ မာတိကာမှာ သွားရှာပြီး သက်ဆိုင်ရာ စာမျက်နှာကို တန်းဖွင့်လို့ ရသလိုပါပဲ။
ဘယ်လို အလုပ်လုပ်သလဲ?
Section titled “ဘယ်လို အလုပ်လုပ်သလဲ?”Department = 'IT'လို့ ရှာတဲ့အခါ Index မရှိရင် Database က Table တစ်ခုလုံးကို (Row တစ်ခုချင်းစီ) လိုက်စစ်ဆေးရပါတယ်။ (Table Scan လုပ်တယ်လို့ ခေါ်ပါတယ်)- Index ရှိရင်တော့ အဲဒီ Index ထဲကနေ ‘IT’ ဆိုတဲ့ နေရာကို တန်းသွားပြီး သက်ဆိုင်ရာ Row တွေကို ချက်ချင်း ဆွဲထုတ်ပေးလိုက်ပါတယ်။
အားသာချက် / အားနည်းချက် (Trade-off)
Section titled “အားသာချက် / အားနည်းချက် (Trade-off)”SELECT(ရှာဖွေခြင်း) ကို အလွန် မြန်ဆန်စေပါတယ်။- ဒါပေမဲ့
INSERT,UPDATE,DELETE(အသစ်ထည့်၊ ပြင်၊ ဖျက်) တွေ လုပ်တဲ့အခါ Index ကိုပါ လိုက်ပြင်ပေးနေရတဲ့အတွက် အနည်းငယ် နှေးကွေးစေပါတယ်။
ဒါကြောင့် WHERE Clause ထဲမှာ အမြဲတမ်းလိုလို ရှာဖွေလေ့ရှိတဲ့ Column တွေမှာပဲ Index တပ်ပေးသင့်ပါတယ်။ (မှတ်ချက် - Primary Key တွေကိုတော့ Database က အလိုအလျောက် Index တပ်ပေးပြီးသားပါ။)
Syntax:
CREATE INDEX idx_employees_departmentON Employees (Department);3. Simplifying Complex Queries - Views (မြင်ကွင်းများ)
Section titled “3. Simplifying Complex Queries - Views (မြင်ကွင်းများ)”View ဆိုတာ Database ထဲမှာ တကယ် မရှိဘဲ၊ Query တစ်ခုကို ရေးပြီး ယာယီ သိမ်းထားတဲ့ Virtual Table (Table အတု) တစ်ခုပါ။
View ထဲမှာ Data တွေကို တိုက်ရိုက် သိမ်းမထားပါဘူး။ သူက မူရင်း Table တွေဆီက Data တွေကို ကိုယ်လိုချင်တဲ့ ပုံစံလေးဖြစ်အောင် ပေါင်းစပ်/စစ်ထုတ်ပြီးမှ ပြသပေးတာပါ။
ဘာကြောင့် သုံးသင့်သလဲ?
Section titled “ဘာကြောင့် သုံးသင့်သလဲ?”- ရိုးရှင်းမှု (Simplicity): အရမ်းရှည်ပြီး ရှုပ်ထွေးတဲ့ (JOIN တွေ အများကြီးပါတဲ့) Query ကြီးတွေကို View အဖြစ် သိမ်းထားလိုက်ရင်၊ နောက်တစ်ခါ အဲဒီ Data လိုချင်တဲ့အခါ View ကို
SELECT *လုပ်လိုက်ရုံနဲ့ အလွယ်တကူ ပြန်ကြည့်လို့ ရပါတယ်။ - လုံခြုံရေး (Security): ဥပမာ - ဝန်ထမ်းတွေရဲ့ လစာ (Salary) Column ကို တခြားသူတွေ ပေးမကြည့်ချင်ရင်၊ Salary Column မပါတဲ့ View တစ်ခု တည်ဆောက်ပြီး အဲဒီ View ကိုပဲ ကြည့်ခွင့် (Access) ပေးထားလို့ ရပါတယ်။
Syntax:
CREATE VIEW v_EmployeeHighSalaries ASSELECT FirstName, Department, SalaryFROM EmployeesWHERE Salary >= 80000;(အခုဆိုရင် ဒီ v_EmployeeHighSalaries ကို Table အစစ်တစ်ခုလိုပဲ အလွယ်တကူ ပြန်ခေါ်သုံးလို့ ရသွားပါပြီ။)
SELECT * FROM v_EmployeeHighSalaries WHERE Department = 'IT';