🛒 āĻĄā§‡āϟāĻžāĻŦ⧇āϏ āύāĻ°ā§āĻŽāĻžāϞāĻžāχāĻœā§‡āĻļāύ

ā§§. 1NF (āĻāĻ• āϘāϰ⧇ āĻāĻ•āϜāύ)

āϏāĻŽāĻ¸ā§āϝāĻž: āĻāĻ• āϏ⧇āϞ⧇āϰ āϭ⧇āϤāϰ āĻ•āĻŽāĻž āĻĻāĻŋā§Ÿā§‡ āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āύāĻžāĻŽ āϞ⧇āĻ–āĻž (āϝ⧇āĻŽāύ: SQL, Java, PHP)āĨ¤

āϏāĻŽāĻžāϧāĻžāύ: āĻĒā§āϰāϤāĻŋāϟāĻž āϘāϰ⧇ āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻž āĻĄā§‡āϟāĻž āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āĻāϕ⧇āϰ āĻ…āϧāĻŋāĻ• āϏāĻžāĻŦāĻœā§‡āĻ•ā§āϟ āĻĨāĻžāĻ•āϞ⧇ āφāϞāĻžāĻĻāĻž āϰ⧋ (Row) āĻŦāĻžāύāĻžāύāĨ¤

āĻŽā§‚āϞ āĻ•āĻĨāĻž: āĻāĻ• āϰ⧁āĻŽā§‡ āĻāĻ•āϜāύāχ āĻĨāĻžāĻ•āĻŦ⧇, āϜāĻ—āĻžāĻ–āĻŋāϚ⧁⧜āĻŋ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻžāĨ¤


⧍. 2NF (āĻ…āĻ°ā§āϧ⧇āĻ• āĻ­āĻžāϞ⧋āĻŦāĻžāϏāĻž āϚāϞāĻŦ⧇ āύāĻž)

āĻāϟāĻž āϤāĻ–āύāχ āĻšā§‡āĻ• āĻ•āϰāĻŦ⧇āύ āϝāĻ–āύ āφāĻĒāύāĻžāϰ Primary Key āĻĻ⧁āχāϟāĻž āĻ•āϞāĻžāĻŽ āĻŽāĻŋāϞ⧇ āĻšā§Ÿ (āϝ⧇āĻŽāύ: Student_ID + Course_ID)āĨ¤

āϏāĻŽāĻ¸ā§āϝāĻž: āϝāĻĻāĻŋ āĻāĻŽāύ āϕ⧋āύ⧋ āĻ•āϞāĻžāĻŽ āĻĨāĻžāϕ⧇ āϝāĻž āĻļ⧁āϧ⧁ Course_ID-āϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ Student_ID-āϰ āϏāĻžāĻĨ⧇ āϤāĻžāϰ āϕ⧋āύ⧋ āϏāĻŽā§āĻĒāĻ°ā§āĻ• āύ⧇āχāĨ¤

āϏāĻŽāĻžāϧāĻžāύ: āĻ“āχ āĻ•āϞāĻžāĻŽāϟāĻžāϕ⧇ āϞāĻžāĻĨāĻŋ āĻĻāĻŋā§Ÿā§‡ āĻŦ⧇āϰ āĻ•āϰ⧇ āφāϞāĻžāĻĻāĻž āĻŸā§‡āĻŦāĻŋāϞ āĻŦāĻžāύāĻŋā§Ÿā§‡ āĻĻāĻŋāύāĨ¤

āĻŽā§‚āϞ āĻ•āĻĨāĻž: āϝāĻĻāĻŋ āĻœā§‹ā§œāĻž (Composite) āϚāĻžāĻŦāĻŋ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āĻŦāĻžāĻ•āĻŋ āϏāĻŦ āĻ•āϞāĻžāĻŽāϕ⧇ āĻ“āχ āĻĻ⧁āχ āϚāĻžāĻŦāĻŋāϰ āĻ“āĻĒāϰāχ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāĻ•āϜāύ⧇āϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰāϞ⧇ āĻšāĻŦ⧇ āύāĻžāĨ¤


ā§Š. 3NF (āĻŦāĻ¨ā§āϧ⧁āĻ¤ā§āĻŦ⧇ āĻĻāĻžāϞāĻžāϞāĻŋ āϚāϞāĻŦ⧇ āύāĻž)

āϏāĻŽāĻ¸ā§āϝāĻž: āϧāϰ⧁āύ, ID āĻšā§‡āύ⧇ Name-āϕ⧇, āφāϰ Name āĻšā§‡āύ⧇ Address-āϕ⧇āĨ¤ āĻāĻ–āύ Address āĻ•āĻŋāĻ¨ā§āϤ⧁ ID-āϰ āĻ“āĻĒāϰ āϏāϰāĻžāϏāϰāĻŋ āύāĻŋāĻ°ā§āĻ­āϰ āύāĻž āĻ•āϰ⧇ Name-āĻāϰ āĻ“āĻĒāϰ āĻĻāĻžāϞāĻžāϞāĻŋ āĻ•āϰāϛ⧇āĨ¤

āϏāĻŽāĻžāϧāĻžāύ: āĻāχ āĻĻāĻžāϞāĻžāϞāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ Name āφāϰ Address-āϕ⧇ āφāϞāĻžāĻĻāĻž āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻāĻŋāύāĨ¤

āĻŽā§‚āϞ āĻ•āĻĨāĻž: Non-key āĻ•āϞāĻžāĻŽ āϝ⧇āύ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ Non-key āĻ•āϞāĻžāĻŽā§‡āϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āύāĻž āĻ•āϰ⧇āĨ¤ āϏāĻŦāĻžāχ āĻļ⧁āϧ⧁ “Primary Key”-āϰ āĻ—ā§‹āϞāĻžāĻŽ āĻšāĻŦ⧇āĨ¤


ā§Ē. BCNF (āĻŦāϏ āχāϜ āĻ…āϞāĻ“ā§Ÿā§‡āϜ āϰāĻžāχāϟ)

āĻāϟāĻž 3NF-āĻāϰ āĻŦ⧜ āĻ­āĻžāχāĨ¤ āĻļāĻ°ā§āϤ: āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύāĻžāϞ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ $X \rightarrow Y$ āĻšāϞ⧇, $X$-āϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāĻ•āϟāĻŋ Super Key āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤

āϏāĻŽāĻ¸ā§āϝāĻž: āϧāϰ⧁āύ, āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻž āĻ•āϞāĻžāĻŽ āφāϛ⧇ āϝāĻž āĻĒā§āϰāĻžāχāĻŽāĻžāϰāĻŋ āĻ•āĻŋ āύāĻž, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧇ āĻ…āĻ¨ā§āϝ āĻ•āĻžāωāϕ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ (Determine) āĻ•āϰāϛ⧇āĨ¤

āϏāĻŽāĻžāϧāĻžāύ: āϝ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻ•āϰāĻŦ⧇, āϤāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ “āĻŦāĻ¸â€ (Primary Key/Super Key) āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āϏ⧇ āĻŦāϏ āύāĻž āĻšā§Ÿ, āϤāĻžāϕ⧇ āφāϞāĻžāĻĻāĻž āĻŸā§‡āĻŦāĻŋāϞ āĻĻāĻŋā§Ÿā§‡ āĻŦāϏ āĻŦāĻžāύāĻŋā§Ÿā§‡ āĻĻāĻŋāύāĨ¤

āĻŽā§‚āϞ āĻ•āĻĨāĻž: āĻŸā§‡āĻŦāĻŋāϞ⧇ āϝāĻĻāĻŋ āϕ⧇āω āĻ•āĻžāωāϕ⧇ āĻšā§‡āύ⧇, āϤāĻŦ⧇ āĻŦāĻžāĻŽ āĻĒāĻžāĻļ⧇āϰ āĻŽāĻžāύ⧁āώāϟāĻžāϕ⧇ (Determinant) āĻ…āĻŦāĻļā§āϝāχ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻŦāϏ (Key) āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤


āĻāĻ• āύāϜāϰ⧇ āĻŽāύ⧇ āϰāĻžāĻ–āĻžāϰ āĻŸā§āϰāĻŋāĻ•:

  1. 1NF: āϏāĻŋāĻ™ā§āϗ⧇āϞ āĻ­ā§āϝāĻžāϞ⧁āĨ¤
  2. 2NF: āĻĒāĻžāĻ°ā§āĻļāĻŋ⧟āĻžāϞ (āφāĻ‚āĻļāĻŋāĻ•) āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻŦāĻžāĻĻāĨ¤
  3. 3NF: āĻ­āĻžā§ŸāĻž āĻŦāĻž āĻĻāĻžāϞāĻžāϞāĻŋ āĻŦāĻžāĻĻāĨ¤
  4. BCNF: āϝ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻ•āϰāĻŦ⧇ āϏ⧇-āχ āĻŦāϏ (Key)āĨ¤

🚀 N+1 Query Problem

🧐 N+1 āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻž āφāϏāϞ⧇ āϕ⧀?

āϧāϰ⧁āύ, āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ ⧍āϟāĻž āĻŸā§‡āĻŦāĻŋāϞ āφāϛ⧇: ā§§. Author (āϞ⧇āĻ–āĻ•) āĨ¨. Books (āĻŦāχ)

āφāĻĒāύāĻŋ āϚāĻžāχāϞ⧇āύ: “āϏāĻŦ āϞ⧇āĻ–āϕ⧇āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āϞ⧇āĻ–āĻž āĻŦāχāϗ⧁āϞ⧋āϰ āϟāĻžāχāĻŸā§‡āϞ āĻĻ⧇āĻ–āĻžāĻŦ⧇āύāĨ¤â€

āϭ⧁āϞ āωāĻĒāĻžā§Ÿ (āϝ⧇āĻ­āĻžāĻŦ⧇ N+1 āϤ⧈āϰāĻŋ āĻšā§Ÿ):

ā§§. āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰāϞ⧇āύ āϏāĻŦ āϞ⧇āĻ–āĻ•āϕ⧇ āφāύāϤ⧇: SELECT * FROM authors; (āĻāϟāĻž āĻšāϞ⧋ 1 āύāĻŽā§āĻŦāϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋ)

⧍. āĻāĻ–āύ āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ ā§§ā§Ļ āϜāύ āϞ⧇āĻ–āĻ• āφāϛ⧇āĨ¤ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻž āϞ⧁āĻĒ āϚāĻžāϞāĻžāϞ⧇āύ āϤāĻžāĻĻ⧇āϰ āĻŦāχāϗ⧁āϞ⧋ āĻŦ⧇āϰ āĻ•āϰāϤ⧇:

āĻĢāϞāĻžāĻĢāϞ: ā§§āϟāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϞāĻžāϏ ā§§ā§ĻāϟāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋ = ā§§ā§§āϟāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋāĨ¤ āĻāϟāĻžāχ N + 1 āϏāĻŽāĻ¸ā§āϝāĻžāĨ¤ āϞ⧇āĻ–āϕ⧇āϰ āϏāĻ‚āĻ–ā§āϝāĻž ā§§ā§Ļā§Ļā§Ļ āĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻĄā§‡āϟāĻžāĻŦ⧇āϏ⧇ ā§§ā§Ļā§Ļā§§ āĻŦāĻžāϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻšāĻŦ⧇, āϝāĻž āφāĻĒāύāĻžāϰ āĻ“ā§Ÿā§‡āĻŦāϏāĻžāχāϟāϕ⧇ āĻ¸ā§āϞ⧋ āĻ•āϰ⧇ āĻĻāĻŋāĻŦ⧇āĨ¤


❌ āϕ⧇āύ āĻāϟāĻž āĻ–āĻžāϰāĻžāĻĒ?


✅ āϏāĻŽāĻžāϧāĻžāύ āϕ⧀? (Eager Loading)

āϏāĻŽāĻžāϧāĻžāύ āĻšāϞ⧋ āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋ āύāĻž āĻ•āϰ⧇ JOIN āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻ…āĻĨāĻŦāĻž āϏāĻŦ āĻĄā§‡āϟāĻž āĻāĻ•āĻŦāĻžāϰ⧇ āύāĻŋā§Ÿā§‡ āφāϏāĻžāĨ¤

ā§§. SQL Join āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇:

SELECT authors.name, books.title FROM authors JOIN books ON authors.id = books.author_id; (āĻāĻ–āĻžāύ⧇ āĻŽāĻžāĻ¤ā§āϰ ā§§āϟāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋāϤ⧇āχ āϏāĻŦ āĻĄā§‡āϟāĻž āϚāϞ⧇ āφāϏāĻŦ⧇!)

⧍. ORM (āϝ⧇āĻŽāύ: Eloquent āĻŦāĻž TypeORM) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇:

āϞ⧁āĻĒ⧇āϰ āϭ⧇āϤāϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āύāĻž āĻ•āϰ⧇ āĻļ⧁āϰ⧁āϤ⧇āχ with āĻŦāĻž include āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāĨ¤


💡 āĻŽāύ⧇ āϰāĻžāĻ–āĻžāϰ āϏāĻšāϜ āĻŦ⧁āĻĻā§āϧāĻŋ


🔗 Database Relationships

āϰāĻŋāϞ⧇āĻļāύ āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ āϏāĻŦāϏāĻŽā§Ÿ āωāϭ⧟ āĻĻāĻŋāĻ• (Both Sides) āĻĨ⧇āϕ⧇ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻŦ⧇āύāĨ¤

ā§§. One-to-One (ā§§ : ā§§)

āϏ⧂āĻ¤ā§āϰ: āĻāĻ•āϜāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻžāχāĨ¤


⧍. One-to-Many (ā§§ : M) — āϏāĻŦāϚāĻžāχāϤ⧇ āĻ•āĻŽāύ!

āϏ⧂āĻ¤ā§āϰ: āĻāĻ•āϜāύ⧇āϰ āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ“āχ āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋āϰ āĻŽāĻžāϞāĻŋāĻ• āĻāĻ•āϜāύāχāĨ¤


ā§Š. Many-to-Many (M : M)

āϏ⧂āĻ¤ā§āϰ: āωāϭ⧟ āĻĻāĻŋāϕ⧇āχ “āĻ…āύ⧇āĻ•āϗ⧁āĻ˛ā§‹â€ āĻšāĻ“ā§ŸāĻžāϰ āϏ⧁āϝ⧋āĻ— āφāϛ⧇āĨ¤


💡 āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāωāϤ⧇ āĻŸā§‡āĻŦāĻŋāϞ āĻĻāĻŋāϞ⧇ āϝāĻž āĻ•āϰāĻŦ⧇āύ (Action Plan)

āϝāĻĻāĻŋ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰ ā§ĢāϟāĻž āĻŸā§‡āĻŦāĻŋāϞ āĻĻā§‡ā§Ÿ (āϝ⧇āĻŽāύ: Users, Posts, Comments, Categories, Tags):

  1. Users <-> Posts: āĻāĻ•āϜāύ āχāωāϜāĻžāϰ āĻ…āύ⧇āĻ• āĻĒā§‹āĻ¸ā§āϟ āĻĻā§‡ā§Ÿ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻž āĻĒā§‹āĻ¸ā§āĻŸā§‡āϰ āϞ⧇āĻ–āĻ• āĻāĻ•āϜāύāĨ¤ (One-to-Many)
  2. Posts <-> Comments: āĻāĻ•āϟāĻž āĻĒā§‹āĻ¸ā§āĻŸā§‡ āĻ…āύ⧇āĻ• āĻ•āĻŽā§‡āĻ¨ā§āϟ āĻĨāĻžāϕ⧇, āĻāĻ•āϟāĻž āĻ•āĻŽā§‡āĻ¨ā§āϟ āĻāĻ•āϟāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒā§‹āĻ¸ā§āĻŸā§‡āχ āĻšā§ŸāĨ¤ (One-to-Many)
  3. Posts <-> Categories: āĻāĻ•āϟāĻž āĻĒā§‹āĻ¸ā§āϟ āĻāĻ•āϟāĻž āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋāϤ⧇ āĻĨāĻžāϕ⧇, āĻāĻ• āĻ•ā§āϝāĻžāϟāĻžāĻ—āϰāĻŋāϤ⧇ āĻ…āύ⧇āĻ• āĻĒā§‹āĻ¸ā§āϟ āĻĨāĻžāϕ⧇āĨ¤ (One-to-Many)
  4. Posts <-> Tags: āĻāĻ•āϟāĻž āĻĒā§‹āĻ¸ā§āĻŸā§‡ āĻ…āύ⧇āĻ• āĻŸā§āϝāĻžāĻ— āĻĨāĻžāϕ⧇, āφāĻŦāĻžāϰ āĻāĻ•āϟāĻž āĻŸā§āϝāĻžāĻ— (āϝ⧇āĻŽāύ: #Tech) āĻ…āύ⧇āĻ• āĻĒā§‹āĻ¸ā§āĻŸā§‡ āĻĨāĻžāϕ⧇āĨ¤ (Many-to-Many) -> āĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻž āĻŽāĻžāĻāĻ–āĻžāύ⧇āϰ āĻŸā§‡āĻŦāĻŋāϞ āϞāĻžāĻ—āĻŦ⧇āĨ¤

đŸ”Ĩ āĻĒā§āϰ⧋-āϟāĻŋāĻĒ: Foreign Key āϕ⧋āĻĨāĻžā§Ÿ āĻŦāϏāĻŦ⧇?


đŸ—‘ī¸ SQL Delete Rules (Referential Actions)

āϝāĻ–āύ āĻāĻ•āϟāĻž āĻĒā§āϰāĻžāχāĻŽāĻžāϰāĻŋ āϕ⧀ āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰāĻž āĻšā§Ÿ, āϤāĻ–āύ āϤāĻžāϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤ āĻĢāϰ⧇āύ āϕ⧀āϗ⧁āϞ⧋āϰ āĻ“āĻĒāϰ āϕ⧀ āĻĒā§āϰāĻ­āĻžāĻŦ āĻĒ⧜āĻŦ⧇, āϤāĻž āĻāχ āϰ⧁āϞāϏāϗ⧁āϞ⧋ āĻ āĻŋāĻ• āĻ•āϰ⧇āĨ¤


ā§§. ON DELETE CASCADE (āϏāĻžāĻĨ⧇āχ āĻŽāϰāĻŦ)

āϞāϜāĻŋāĻ•: āϝāĻĻāĻŋ Parent āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āϕ⧋āύ⧋ āϰ⧋ āĻĄāĻŋāϞāĻŋāϟ āĻšā§Ÿ, āϤāĻŦ⧇ āϤāĻžāϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤ Child āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āϏāĻŦ āϰ⧋ āĻ…āĻŸā§‹āĻŽā§‡āϟāĻŋāĻ• āĻĄāĻŋāϞāĻŋāϟ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤


⧍. ON DELETE SET NULL (āĻāϤāĻŋāĻŽ āĻšā§Ÿā§‡ āϝāĻžāĻ“ā§ŸāĻž)

āϞāϜāĻŋāĻ•: āϝāĻĻāĻŋ Parent āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āϰ⧋ āĻĄāĻŋāϞāĻŋāϟ āĻšā§Ÿ, āϤāĻŦ⧇ Child āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻĢāϰ⧇āύ āϕ⧀ āĻ•āϞāĻžāĻŽāϟāĻŋ NULL āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤ (āϤāĻŦ⧇ āĻ•āϞāĻžāĻŽāϟāĻŋ NULL āĻāϞāĻžāω āĻ•āϰāϤ⧇ āĻšāĻŦ⧇)āĨ¤


ā§Š. ON DELETE RESTRICT / NO ACTION (āĻŦāĻžāϧāĻž āĻĻ⧇āĻ“ā§ŸāĻž)

āϞāϜāĻŋāĻ•: āϝāϤāĻ•ā§āώāĻŖ Child āĻŸā§‡āĻŦāĻŋāϞ⧇ āϕ⧋āύ⧋ āĻĄā§‡āϟāĻž āĻĨāĻžāĻ•āĻŦ⧇, āϤāϤāĻ•ā§āώāĻŖ āφāĻĒāύāĻŋ Parent āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻ“āχ āϰ⧋-āϟāĻŋ āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤ āĻĄā§‡āϟāĻžāĻŦ⧇āϏ āφāĻĒāύāĻžāϕ⧇ Error āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤


ā§Ē. ON DELETE SET DEFAULT (āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ­āϰāϏāĻž)

āϞāϜāĻŋāĻ•: Parent āϰ⧋ āĻĄāĻŋāϞāĻŋāϟ āĻšāϞ⧇ Child āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻĢāϰ⧇āύ āϕ⧀ āĻ•āϞāĻžāĻŽāϟāĻŋ āĻāĻ•āϟāĻŋ ‘Default Value’ āϤ⧇ āϏ⧇āϟ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤


💡 āĻāĻ• āύāϜāϰ⧇ āϏāĻžāĻŽāĻžāϰāĻŋ

Rule Parent āĻĄāĻŋāϞāĻŋāϟ āĻšāϞ⧇ Child-āĻāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž
CASCADE āϏāĻŦ āĻĄāĻŋāϞāĻŋāϟ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤
SET NULL āĻ•āϞāĻžāĻŽāϟāĻŋ āĻ–āĻžāϞāĻŋ (NULL) āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤
RESTRICT āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰāϤ⧇ āĻĻāĻŋāĻŦ⧇ āύāĻž (Error)āĨ¤
SET DEFAULT āφāϗ⧇ āĻĨ⧇āϕ⧇ āϏ⧇āϟ āĻ•āϰāĻž āĻ­ā§āϝāĻžāϞ⧁ āĻŦāϏāĻŦ⧇āĨ¤

āϕ⧋āĻĄ āωāĻĻāĻžāĻšāϰāĻŖ (SQL):

CREATE TABLE Orders (
    OrderID int PRIMARY KEY,
    CustomerID int,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
    ON DELETE CASCADE -- āĻāĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āϰ⧁āϞ āϏ⧇āϟ āĻ•āϰ⧇āύ
);

âš–ī¸ WHERE vs HAVING (āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ)

āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ WHERE HAVING
āĻ•āĻ–āύ āĻŦāϏ⧇? GROUP BY āĻ•āϰāĻžāϰ āφāϗ⧇āĨ¤ GROUP BY āĻ•āϰāĻžāϰ āĻĒāϰ⧇āĨ¤
āĻ•āĻžāϕ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧇? āϏāĻžāϧāĻžāϰāĻŖ āϰ⧋ (Row) āϕ⧇āĨ¤ āĻ—ā§āϰ⧁āĻĒ āĻŦāĻž āĻ…ā§āϝāĻžāĻ—ā§āϰāĻŋāϗ⧇āϟ (SUM, AVG) āϕ⧇āĨ¤
āĻ…ā§āϝāĻžāĻ—ā§āϰāĻŋāϗ⧇āϟ āĻĢāĻžāĻ‚āĻļāύ? āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§Ÿ āύāĻžāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• (āĻŦāĻž āĻ•āĻŽāύ)āĨ¤
āĻ•āĻžāϜ āĻ…āĻĒā§āĻ°ā§Ÿā§‹āϜāύ⧀āϝāĻŧ āϰ⧋ āφāϗ⧇āχ āĻŦāĻžāĻĻ āĻĻā§‡ā§ŸāĨ¤ āĻ—ā§āϰ⧁āĻĒ āĻ•āϰāĻžāϰ āĻĒāϰ āĻļāĻ°ā§āϤ āĻšā§‡āĻ• āĻ•āϰ⧇āĨ¤

📊 GROUP BY āĻāϰ āĻ•āĻžāϜ āϕ⧀?

āϏāĻ‚āĻœā§āĻžāĻž: āĻāĻ•āχ āϧāϰāϪ⧇āϰ āĻ­ā§āϝāĻžāϞ⧁ āφāϛ⧇ āĻāĻŽāύ āϰ⧋ āϗ⧁āϞ⧋āϕ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻŽāĻžāϰāĻŋ (Summary) āϰ⧇āϜāĻžāĻ˛ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāĨ¤

āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāχ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋āϰ āϏāĻžāĻĨ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšā§Ÿ:


đŸ› ī¸ āĻ•āĻžāĻœā§‡āϰ āϧāĻžāĻĒ: