βπ[Backend Development] κ³μΈ΅ν λλκΈμμ λκΈμ μμ νλ©΄ μ΄λ€ νμμ΄ λ°μν κΉμ? 1οΈβ£β
π Intro.
-
λκΈμ μμ νλ λ°©μμλ μ¬λ¬ κ°μ§κ° μμ΅λλ€.
- λ°μ΄ν°λ² μ΄μ€μ μΈλ ν€(Foreign Key) μ€μ λ° μμ μ μ± μ λ°λΌ λ€λ₯Έ νμμ΄ λ°μν μ μμ΅λλ€.
β 1οΈβ£ λκΈ 2μ ꡬ쑰 λΆμ.
- λκΈ 2λ λκΈ 1μ μμ λκΈ(λλκΈ).
- λκΈ 3, λκΈ 5λ λκΈ 2μ μμ λλκΈ.
- μ¦, λκΈ 2λ₯Ό μμ νλ©΄ λκΈ 3κ³Ό λκΈ 5κ° κ³ μ μν(λΆλͺ¨ μλ μν)κ° λ¨.
β 2οΈβ£ λκΈ 2 μμ μ λ°μν μ μλ μλ리μ€
π μλλ¦¬μ€ 1οΈβ£: μ°μ μμ (Cascading Delete)
- λκΈ 2λ₯Ό μμ νλ©΄ λκΈ 3κ³Ό λκΈ 5λ ν¨κ» μμ λ¨.
- ON DELETE CASCADE μ΅μ μ΄ μ€μ λμ΄ μλ κ²½μ° λ°μ.
π κ²°κ³Ό.
- μμ ν λ¨μμλ λκΈ λͺ©λ‘:
λκΈ 1
λκΈ 4
λκΈ 6
- λκΈ 3κ³Ό λκΈ 5κΉμ§ ν¨κ» μμ λλ―λ‘, ν΄λΉ μ€λ λ μ μ²΄κ° μ¬λΌμ§.
π μλλ¦¬μ€ 2οΈβ£: κ³ μ λκΈ μ²λ¦¬ (Orphan Handling)
- λκΈ 2λ₯Ό μμ νλ©΄ λκΈ 3κ³Ό λκΈ 5μ λΆλͺ¨(parent_id)λ₯Ό NULLλ‘ μ€μ .
- μ¦, λκΈ 3κ³Ό λκΈ 5κ° λ 립μ μΈ μ΅μμ λκΈμ΄ λ¨.
- λκΈ 4μ λκΈ 6μ κ³μΈ΅ ꡬ쑰λ μ μ§λ¨ β λκΈ 6μ parent_id = 4
π κ²°κ³Ό.
- μμ ν λ¨μμλ λκΈ λͺ©λ‘:
λκΈ 1
λκΈ 3 (κΈ°μ‘΄ λκΈ 2μ μμ β μ΅μμ λκΈλ‘ μ΄λ)
λκΈ 5 (κΈ°μ‘΄ λκΈ 2μ μμ β μ΅μμ λκΈλ‘ μ΄λ)
λκΈ 4
β λκΈ 6
π μλλ¦¬μ€ 3οΈβ£: λΆλͺ¨ λκΈ λ체 (Reparenting)
- λκΈ 2λ₯Ό μμ νλ©΄ λκΈ 3κ³Ό λκΈ 4μ λΆλͺ¨λ₯Ό λκΈ 1λ‘ λ³κ²½.
- μ¦, λκΈ 2μ μμλ€μ΄ λκΈ 1μ μ§μ μ μΈ μμ λκΈμ΄ λ¨
π κ²°κ³Ό.
- μμ ν λ¨μμλ λκΈ λͺ©λ‘:
λκΈ 1
β λκΈ 3
β λκΈ 5
λκΈ 4
β λκΈ 6
β 3οΈβ£ λκΈ 2 μμ λ₯Ό μ²λ¦¬νλ λ°©λ² μ ν.
μμ λ°©μ | μ€λͺ | μ₯μ | λ¨μ |
---|---|---|---|
μ°μ μμ (Cascade) | λκΈ 2λ₯Ό μμ νλ©΄ λκΈ 3, 5λ μμ | λ°μ΄ν° μ ν©μ± μ μ§ | μ μ κ° μμμΉ λͺ»ν μμ λ°μ κ°λ₯ |
κ³ μ λκΈ μ²λ¦¬ (Orphan) | λκΈ 3κ³Ό 5κ° μ΅μμ λκΈμ΄ λ¨ | μμ νμλ λ°μ΄ν° 보쑴 | UIμμ λκΈ κ΄κ³κ° κΉ¨μ§ μ μμ |
λΆλͺ¨ λκΈ λ체(Reparenting) | λκΈ 3κ³Ό λκΈ 5κ° λκΈ 1μ μμμ΄ λ¨ | λλκΈ κ΅¬μ‘° μ μ§ | λ°μ΄ν° μμ μ΄ νμ |
β 4οΈβ£ MySQLμμ μμ μ²λ¦¬ λ°©μ μμ .
1οΈβ£ ON DELETE CASCADE (μ°μ μμ )
ALTER TABLE comments ADD CONSTRAINT fk_parent
FOREIGN KEY (parent_id) REFERENCES comments (comment_id) ON DELETE CASCADE;
- λκΈ 2λ₯Ό μμ νλ©΄ λκΈ 3κ³Ό λκΈ 5λ μλμΌλ‘ μμ λ¨.
2οΈβ£ λΆλͺ¨ λκΈμ NULLλ‘ μ€μ (κ³ μ λκΈ μ²λ¦¬)
UPDATE comments SET parent_id = NULL WHERE parent_id = 2;
DELETE FROM comments WHERE comment_id = 2;
- λκΈ 3κ³Ό λκΈ 5κ° λΆλͺ¨ μμ΄ μ΅μμ λκΈλ‘ λ³κ²½λ¨.
3οΈβ£ λΆλͺ¨ λκΈ λ³κ²½ (Reparenting)
UPDATE comments SET parent_id = 1 WHERE parent_id = 2;
DELETE FROM comments WHERE comment_id = 2;
- λκΈ 3κ³Ό λκΈ 5κ° λκΈ 1μ μμμ΄ λ¨.
β 5οΈβ£ κ²°λ‘
- λκΈ 2λ₯Ό μμ νλ©΄ λκΈ 3κ³Ό λκΈ 5μ μ²λ¦¬ λ°©λ²μ λ°λΌ λ€λ₯Έ κ²°κ³Όκ° λ°μ.
- μ΄λ€ λ°©μμ΄ κ°μ₯ μ μ νμ§λ λΉμ¦λμ€ λ‘μ§κ³Ό UXμ λ°λΌ κ²°μ ν΄μΌ ν¨.
- 보ν΅μ λΆλͺ¨ λκΈμ μμ ν΄λ λλκΈμ΄ λ¨λλ‘ μ²λ¦¬(κ³ μ λκΈ μ²λ¦¬ or λΆλͺ¨ λκΈ λ³κ²½)νλ κ²½μ°κ° λ§μ.