Thuta Learning
ရှာဖွေရန်
IntermediateData & Databasesbeginner

Constraints နှင့် Relationships

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Constraints နှင့် Relationships concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ SQL/command ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် အသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

Application validation တစ်ခုတည်းကိုယုံလို့မရပါဘူး—script၊ admin tool သို့ service တခြားတစ်ခုက database ကိုရေးနိုင်ပါတယ်။ Constraint က entry point အားလုံးအတွက် နောက်ဆုံးစည်းမျဉ်းဖြစ်ပါတယ်။ Foreign key က parent/child relationship ကိုကာကွယ်ပြီး `ON DELETE` action ကို domain meaning အလိုက်တိတိကျကျရွေးရပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Tutorial တစ်ခုတွင် lesson အများကြီးရှိနိုင်အောင် `app.lessons` ကိုဖန်တီးမယ်။ Tutorial တစ်ခုဖျက်လျှင် lesson များပါဖျက်လိုသော ownership relationship ဖြစ်လို့ `ON DELETE CASCADE` သုံးပြီး tutorial တစ်ခုအတွင်း lesson number မထပ်အောင် composite unique constraint ထည့်မယ်။

အတူတူ စမ်းရေးကြည့်မယ်

sql
CREATE TABLE app.lessons (
  lesson_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  tutorial_id bigint NOT NULL
    REFERENCES app.tutorials(tutorial_id) ON DELETE CASCADE,
  lesson_number integer NOT NULL CHECK (lesson_number > 0),
  title text NOT NULL CHECK (length(trim(title)) >= 3),
  duration_minutes integer NOT NULL CHECK (duration_minutes BETWEEN 1 AND 600),
  UNIQUE (tutorial_id, lesson_number),
  UNIQUE (tutorial_id, lesson_id)
);

CREATE TABLE app.enrollments (
  enrollment_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  user_id bigint NOT NULL REFERENCES app.users(user_id) ON DELETE CASCADE,
  tutorial_id bigint NOT NULL REFERENCES app.tutorials(tutorial_id) ON DELETE CASCADE,
  enrolled_at timestamptz NOT NULL DEFAULT now(),
  UNIQUE (user_id, tutorial_id)
);
You should see
Orphan lesson နှင့် duplicate lesson number မဝင်နိုင်သော table ရမည်။

၅ မိနစ် စမ်းကြည့်

Enrollment table အတွက် user/tutorial foreign keys နှင့် duplicate enrollment မဖြစ်စေသော unique constraint ရေးပါ။

သတိလေးတစ်ချက်

`ON DELETE CASCADE` ကိုအလွယ်တကူမသုံးပါနှင့်။ Ownership relationship မဟုတ်လျှင် မတော်တဆ data အများအပြားဖျက်နိုင်ပါတယ်။

PostgreSQL — ConstraintsPostgreSQL Global Development Group

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • `ON DELETE CASCADE` ကိုအလွယ်တကူမသုံးပါနှင့်။ Ownership relationship မဟုတ်လျှင် မတော်တဆ data အများအပြားဖျက်နိုင်ပါတယ်။
  • နမူနာ code ကို production data ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test database နှင့် recoverable backup ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

Enrollment table အတွက် user/tutorial foreign keys နှင့် duplicate enrollment မဖြစ်စေသော unique constraint ရေးပါ။

You'll know it worked when: Orphan lesson နှင့် duplicate lesson number မဝင်နိုင်သော table ရမည်။

Constraints နှင့် Relationships | Thuta Learning