ν¨μμ μ’ μ(Functional Dependency)
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμμ μ κ·ν κ³Όμ μ μ΄ν΄λ³΄κΈ° μ , ν¨μμ μ’ μ κ°λ μ λν΄ λ¨Όμ μμ보μ. 릴λ μ΄μ R(ν μ΄λΈ)μμ Xμ Yλ₯Ό Rμ μμ±μ λΆλΆμ§ν©μ΄λΌκ³ ν λ, Xμ κ° κ°κ°μ λν΄ Yμ κ°μ΄ μ€μ§ νλλ‘ κ²°μ λ λ Yλ Xμ μ’ μλλ€κ³ νλ€. μ¦, ν μ΄λΈμ ν νλκ° μ§ν©(X)μ΄ λ€λ₯Έ νλκ° μ§ν©(Y)μ κ²°μ νλ κ΄κ³λ₯Ό λ§νλ€.
μ¬κΈ°μ "κ²°μ νλ€"λ μλ―Έλ 무μμΌκΉ? "μ μ μλ€", "μν₯μ λ―ΈμΉλ€" λΌκ³ λ°μλ€μ΄λ©΄ μ½λ€. "Xκ° Yμ κ²°μ νλ€"λΌλ λ»μ Xμ κ°μ μλ©΄ Yμ κ°μ μ μ μκ³ , Xμ Yλ κ΄κ³κ° μμ΄ Xμ κ°μ μν΄ Yμ κ°μ΄ λ¬λΌμ§λ€λ κ²μ μλ―Ένλ€. μ΄λ° ν¨μμ μ’
μ κ΄κ³λ₯Ό νμ΄νλ₯Ό ν΅ν΄ X→Y
λΌκ³ νννκ³ X
λ₯Ό κ²°μ μ Y
λ₯Ό μ’
μμλΌκ³ λ§νλ€. μ¬κΈ°μ "ν¨μμ "μ΄λΌλ ννμ ν μΈνΈμ μ
λ ₯μ λν΄ μ νν νλμ μΆλ ₯μ λ°ννλ ν¨μμ μΈ νΉμ§μ κ°μ§κ³ μκΈ° λλ¬Έμ λΆμ¬μ§ μ΄λ¦μ΄λ€. μνμμμ ν¨μμ κ°μ΄ λ°μ΄ν°λ² μ΄μ€μμ νλμ μμ±κ° λλ μμ± μ§ν©μ΄ λ€λ₯Έ μμ±κ°(μμ± μ§ν©)μ κ²°μ νλ€λ κ²μ μλ―Ένλ€.
μλμ κ°μ ν μ΄λΈμ΄ μ‘΄μ¬ν λ νλ²μ μλ©΄ μ΄λ¦, λμ΄λ₯Ό μ μ μλ€. λν μ 곡μ½λλ₯Ό μλ©΄ μ 곡λͺ μ μ μ μλ€. λ°λΌμ μ΄λ¦, λμ΄ μμ±μ νλ²μ ν¨μμ μ’ μκ΄κ³μ μκ³ μ 곡λͺ μ μ 곡μ½λμ ν¨μμ μ’ μκ΄κ³μ μλ€.
νλ² → μ΄λ¦
νλ² → λμ΄
νλ² → {μ΄λ¦,λμ΄}
μ 곡μ½λ → μ 곡λͺ
μμ ν¨μ μ’ μ
μμ ν¨μ μ’ μμ΄λ μ’ μμκ° κΈ°λ³Έν€μλ§ μ’ μλλ κ²½μ°λ₯Ό λ§νλ€. λ§μ½ κΈ°λ³Έν€κ° μ¬λ¬ μμ±μΌλ‘ ꡬμ±λ 볡ν©ν€λΌλ©΄ κΈ°λ³Έν€λ₯Ό ꡬμ±νλ λͺ¨λ μμ±μ μ’ μλμ΄μΌ νλ€.
λΆλΆ ν¨μ μ’ μ
λΆλΆ ν¨μ μ’ μμ΄λ ν μ΄λΈμμ μ’ μμκ° κΈ°λ³Έν€κ° μλ λ€λ₯Έ μμ±μ μ’ μλκ±°λ, κΈ°λ³Έν€κ° 볡ν©ν€μΈ κ²½μ° κ·Έμ€ νΉμ μμ±μλ§ μ’ μλλ κ²½μ°λ₯Ό λ§νλ€.
μ΄ν ν¨μ μ’ μ
μ΄ν ν¨μ μ’
μμ΄λ ν
μ΄λΈμμ A → B
μ B → C
κ° μ‘΄μ¬ν λ A → C
κ° μ±λ¦½λλλ°, μ΄λ C
κ° A
μ μ΄νμ μΌλ‘ ν¨μ μ’
μλμλ€κ³ νλ€. μ¦, Aλ₯Ό μλ©΄ Bλ₯Ό μκ³ κ·Έλ₯Ό ν΅ν΄ Cλ₯Ό μ μ μλ κ²½μ°λ₯Ό λ§νλ€. (ν μμ±μ κ°μ΄ λ€λ₯Έ μμ±μ ν΅ν΄ μ’
μμ μΌλ‘ κ²°μ λλ νμ)
λ°μ΄ν°λ² μ΄μ€ μ κ·ν
릴λ μ΄μ
κ° μλͺ»λ μ’
μ κ΄κ³λ‘ λ°μ΄ν°λ² μ΄μ€ μ΄μνμμ΄ μΌμ΄λ κ²μ ν΄κ²°νκ±°λ, ν¨μ¨μ±μ μν΄ λ¦΄λ μ΄μ
μ μ¬λ¬ κ°λ‘ λΆλ¦¬νλ κ³Όμ μ΄λ€. μ κ·νλ ν¨μμ μ’
μμ±μ μ κ±°νλ κ³Όμ μ΄λΌκ³ ννν μλ μλ€. μ κ·ν μμΉμ κΈ°λ°μΌλ‘ μ κ·νμ λ§λμ΄κ°λ©° μ κ·ν μ λλ NF
(Normal Form: μ κ·ν)μΌλ‘ νννλ€.
π‘ λ°μ΄ν°λ² μ΄μ€ μ΄μνμ
λ°μ΄ν°λ² μ΄μ€μμ μ λ³΄κ° λΆμΌμΉνκ±°λ λΆμμ ν μνλ₯Ό λ§νλ€. λ°μ΄ν°λ₯Ό μ½μ , μμ , μμ ν λ λ°μν μ μμΌλ©° λ°μ΄ν°λ² μ΄μ€ μ€κ³μ κ΄λ ¨λ λ¬Έμ λ₯Ό λνλΌ μ μλ€.
μ½μ μ΄μ
μλ‘μ΄ λ°μ΄ν°λ₯Ό μ½μ ν λ λ°μνλ μ΄μνμ
μλ₯Ό λ€μ΄ ν μ΄λΈ μΌλΆ μμ±μ NULLλ‘ λκ±°λ λΆνμν μ 보λ₯Ό μ€λ³΅ μ λ ₯νλ κ²½μ°
λ°μ΄ν° λΆμΌμΉ λλ μ€λ³΅μ΄ λ°μν μ μμ
κ°±μ μ΄μ
λ°μ΄ν°λ₯Ό μ λ°μ΄νΈν λ λ°μνλ μ΄μνμ
μλ₯Ό λ€μ΄ ν μ΄λΈμ ν μμ±μ κ°μ κ°±μ ν λ, ν΄λΉ μμ±κ³Ό λ€λ₯Έ μμ± μ¬μ΄μ λΆμΌμΉκ° μΌμ΄λλ κ²½μ°
λ°μ΄ν°μ μΌκ΄μ±μ΄ κΉ¨μ§ μ μμ
μμ μ΄μ
λ°μ΄ν°λ₯Ό μμ ν λ λ°μνλ μ΄μνμ
νΉμ λ°μ΄ν° μμ μ λ€λ₯Έ κ΄λ ¨ λ°μ΄ν°λ ν¨κ» μμ λμ΄ νμν μ λ³΄κ° μμ€λλ κ²½μ°
λ°μ΄ν° 무결μ±μ΄ νΌμλ μ μμ
π‘ μ κ·ν μμΉ
- κ°μ μλ―Έλ₯Ό νννλ 릴λ μ΄μ μ΄μ§λ§ μ’ λ μ’μ ꡬ쑰
- μλ£μ μ€λ³΅μ± κ°μ
- λ 립μ μΈ κ΄κ³λ λ³κ°μ 릴λ μ΄μ μΌλ‘ νν
- κ° λ¦΄λ μ΄μ μ λ 립μ μΈ νν κ°λ₯
μ 1μ κ·ν (1NF)
릴λ μ΄μ μ λͺ¨λ λλ©μΈμ΄ λ μ΄μ λΆν΄λ μ μλ μμ κ°λ§μΌλ‘ ꡬμ±λμ΄μΌ ν¨
- κ° μμ±μ κ°μ νλμ κ°λ§ κ°μ ΈμΌ ν¨
- κ° μμ±μ κ°μ κ°μ νμ μ κ°μ κ°μ ΈμΌ ν¨
- κ° μμ±μ μ μΌν μ΄λ¦μ κ°μ ΈμΌ ν¨
- μμ±μ μμ μκ΄μμ
μ 2μ κ·ν (2NF)
μ 1μ κ·νμ λ§μ‘±μν€κ³ , λͺ¨λ 컬λΌμ λΆλΆ ν¨μ μ’
μμ±μ μ κ±°ν΄μΌ ν¨
(μ¦, μμ ν¨μ μ’
μ λ§μ‘±)
- μ 1μ κ·ν λ§μ‘±
- λΆλΆ ν¨μ μ’ μ μ κ±°
- 릴λ μ΄μ λΆν΄ μ λλ±ν 릴λ μ΄μ μΌλ‘ λΆν΄
- 무μμ€ λΆν΄ (μ 보 μμ€ λ°μ X)
μλ κ·Έλ¦Όμμ μ κ·ννκΈ° μ ν
μ΄λΈμ 보면 κΈ°λ³Έν€λ λ°μ€ μ³μ§ {νλ², κ³Όλͺ©μ΄λ¦}
λ‘ λ³΅ν©ν€λ€. μ΄ ν
μ΄λΈμμ λΆλΆ ν¨μ μ’
μμ±μ΄ μ‘΄μ¬νλλ°, νμ μ΄λ¦μ νλ² μμ± νλλ§μΌλ‘ κ²°μ λλ€. μ¦, {νλ², κ³Όλͺ©μ΄λ¦}
μ λͺ¨λ λ³Ό νμ μμ΄ νλ²
λ§μΌλ‘ νμμ μλ³ν μ μλ€. λ°λΌμ λΆλΆ ν¨μ μ’
μμ±μ μμ λ ν
μ΄λΈλ‘ λΆν΄νλ€.
μ¬κΈ°μ "λλ±ν" 릴λ μ΄μ μΌλ‘ λΆν΄νλ€λ μλ―Έλ λΆν΄νκΈ° μ 릴λ μ΄μ κ³Ό λμΌν μ 보λ₯Ό λ΄κ³ μμ΄μΌ νλ€λ κ²μ΄λ€. μ 2μ κ·νμ κ±°μΉ κ° ν μ΄λΈμ λͺ¨λ μμ±μ΄ κΈ°λ³Έν€μ μν΄ κ²°μ λλ μμ ν¨μ μ’ μμ±μ κ°κ² λλ€.
μ 3μ κ·ν (3NF)
μ 2μ κ·νμ λ§μ‘±μν€κ³ , κΈ°λ³Έν€κ° μλ λͺ¨λ μμ±μ΄ κΈ°λ³Έν€μ λν΄μ μ΄ν ν¨μ μ’ μλμ§ μμ μνμ¬μΌ ν¨. μ¦, λ€μ λ§ν΄ ν μ΄λΈ λ΄μ λͺ¨λ μμ±μ΄ κΈ°λ³Έν€μλ§ μμ‘΄λμ΄μΌ νλ€. (λ€λ₯Έ μμ± κ±°μ³μ μ’ μλμ§ X)
- μ 2μ κ·ν λ§μ‘±
- μ΄ν ν¨μ μ’ μ μ κ±°
μλ κ·Έλ¦Όμμ μ κ·ν μ΄μ ν
μ΄λΈμ 보면 κ°μμ½λκ° κΈ°λ³Έν€μ΄λ©°, λ€λ₯Έ μμ±μ΄ κ°μμ½λμ λν΄ μ΄ν ν¨μ μ’
μλμ΄ μλ κ²μ λ³Ό μ μλ€. κ°μμ½λ → λ΄λΉκ΅μ → {κ΅μμ€, νκ³Ό}
μ΄μ κ°μ μ΄ν ν¨μ μ’
μμ΄ μ‘΄μ¬νλλ°, κ΅μμ€
κ³Ό νκ³Ό
μμ±μ κΈ°λ³Έν€μΈ κ°μμ½λ
μ μ§μ μμ‘΄νλ κ²μ΄ μλλΌ λ€λ₯Έ μμ±μ κ±°μ³ μ’
μλμ΄ μλ€. λ°λΌμ μ΄λ° μ’
μμ±μ λ ν
μ΄λΈλ‘ λΆν΄νμ¬ μ κ±°ν΄ μ€λ€.
보μ΄μ€/μ½λ μ κ·ν (BCNF)
μ 3μ κ·νμ λ§μ‘±μν€κ³ , κ²°μ μκ° ν보ν€κ° μλ ν¨μ μ’ μ κ΄κ³λ₯Ό μ κ±°ν΄μΌ ν¨. μ¦, ν μ΄λΈμ ν¨μ μ’ μ κ΄κ³μμ λͺ¨λ κ²°μ μκ° ν보ν€μΈ μνλ₯Ό λ§νλ€. μ 3μ κ·νμ λ κ°νν λ²μ μΌλ‘, μ 3μ κ·νμ κ±°μΉλ©΄ λͺ¨λ μμ±μ κΈ°λ³Έν€μ μ§μ μ’ μλλλ° BCNFμμλ λͺ¨λ μμ±μ μ’ μμ μ μ₯μμκ° μλ κ²°μ μ μ μ₯μμ λ³Έλ€. λͺ¨λ μμ±μ΄ κ²°μ μκ° λμμ λ ν보ν€κ° μλ μμ±μ΄ μλ€λ©΄ BCNFλ₯Ό ν΅ν΄ ν μ΄λΈμ λΆν΄νλ€.
- μ 3μ κ·ν λ§μ‘±
- λͺ¨λ κ²°μ μκ° νλ³΄ν€ μ§ν©μ μν¨
μλ κ·Έλ¦Όμμ ν κ³Όλͺ©μ μ¬λ¬ κ΅μλμ΄ λ΄λΉνμκ³ , κ΅μλμ κ°μ νλμ μμ λ§ λ§‘λλ€κ³ κ°μ ν΄ λ³΄μ. (111λ² νμκ³Ό 222λ² νμμ λͺ¨λ μ»΄ν¨ν°κ·Έλν½μ€ κ³Όλͺ©μ μκ°νμ§λ§, λ€λ₯Έ κ΅μλμ μμ μ΄λ€.) μ΄λ° κ²½μ° νλ²κ³Ό κ³Όλͺ©λͺ μ λͺ¨λ μμμΌ λ΄λΉκ΅μλ₯Ό μ μ μλ€. μ΄λ λ΄λΉκ΅μ μμ±μ μ’ μμ μ μ₯μμ λ³Ό λ κΈ°λ³Έν€{νλ², κ³Όλͺ©λͺ }μ μ§μ μ’ μλκΈ° λλ¬Έμ μ 3μ κ·νκΉμ§λ λ§μ‘±νλ€.
νμ§λ§ λ΄λΉκ΅μ μμ±μ κ²°μ μ μ μ₯μμ 보면, ν κ΅μ λΉ νλμ κ³Όλͺ©λ§ 맑μκΈ° λλ¬Έμ κ³Όλͺ©λͺ μ κ²°μ ν μ μλ€. λν λ΄λΉκ΅μ λ¨μΌ 컬λΌμ ν μ΄λΈμμ λ μ½λλ₯Ό μ μΌνκ² μλ³νμ§ λͺ»νκΈ° λλ¬Έμ κΈ°λ³Έν€(ν보ν€)κ° λ μ μλ€. (λ μ½λλ₯Ό μ μΌνκ² μλ³νλ €λ©΄ νλ²+λ΄λΉκ΅μ μ‘°ν© νμ) λ°λΌμ μλ ν μ΄λΈμ BCNFμ λμμ΄ λλ€. λ ν μ΄λΈλ‘ λΆν΄νλ©΄ λ΄λΉκ΅μ-κ³Όλͺ©λͺ ν μ΄λΈμμ λ΄λΉκ΅μκ° κΈ°λ³Έν€(ν보ν€)κ° λμ΄ BCNFλ₯Ό λ§μ‘±μν¨λ€.
'π CS > π DB' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[DB] λ Όλ¦¬μ μ‘°μΈ (Inner/Outer/Cross/Self) (0) | 2023.08.10 |
---|---|
[DB] Persistence Framework (SQL Mapper vs ORM) (6) | 2022.09.26 |
[DB] νν°μ λ (6) | 2022.09.05 |
[DB] SQL (0) | 2022.09.01 |
[DB] νΈλμμ (κ°λ /νΉμ±/μ°μ°/μν) (6) | 2022.08.22 |