λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“ŒCS/DB

[DB] μ •κ·œν™”

by dar0m! 2021. 4. 11.

이상 ν˜„μƒ(anomaly)

ν…Œμ΄λΈ”λ‚΄μ˜ 데이터 쀑볡성에 μ˜ν•΄μ„œ λ°œμƒλ˜λŠ” 데이터 뢈일치 ν˜„μƒ.
= μ• νŠΈλ¦¬λ·°νŠΈλ“€ 간에 μ‘΄μž¬ν•˜λŠ” μ—¬λŸ¬ 쒅속관계λ₯Ό ν•˜λ‚˜μ˜ λ¦΄λ ˆμ΄μ…˜μ— ν‘œν˜„ν–ˆκΈ° λ•Œλ¬Έμ— λ‚˜νƒ€λ‚˜λŠ” 데이터 뢈일치 ν˜„μƒ

κ°±μ‹  이상, μ‚½μž… 이상, μ‚­μ œ μ΄μƒμœΌλ‘œ κ΅¬μ„±λœλ‹€.

  • κ°±μ‹  이상 (Modification Anomaly) : 반볡된 데이터 쀑에 일뢀λ₯Ό κ°±μ‹  ν•  μ‹œ λ°μ΄ν„°μ˜ λΆˆμΌμΉ˜κ°€ λ°œμƒν•œλ‹€.
  • μ‚½μž… 이상 (Insertion Anomaly) : λΆˆν•„μš”ν•œ 정보λ₯Ό ν•¨κ»˜ μ €μž₯ν•˜μ§€ μ•Šκ³ μ„œλŠ” μ–΄λ–€ 정보λ₯Ό μ €μž₯ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜λ‹€.
  • μ‚­μ œ 이상 (Deletion Anomaly) : ν•„μš”ν•œ 정보λ₯Ό ν•¨κ»˜ μ‚­μ œν•˜μ§€ μ•Šκ³ μ„œλŠ” μ–΄λ–€ 정보λ₯Ό μ‚­μ œν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜λ‹€.

이상 ν˜„μƒμ€ 쒅속관계λ₯Ό λΆ„μ„ν•˜μ—¬ μ—¬λŸ¬ 개의 λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ λΆ„ν•΄ν•˜λŠ” μ •κ·œν™”λ₯Ό 톡해 방지할 수 μžˆλ‹€.

 

μ •κ·œν™”

ν…Œμ΄λΈ” 간에 μ€‘λ³΅λœ 데이터λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이닀. μ€‘λ³΅λœ 데이터λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨ 무결성을 μœ μ§€ν•  수 있으며 DB μ €μž₯ μš©λŸ‰μ„ 쀄일 수 μžˆλ‹€.

μ •κ·œν™” 단계에 따라 λΆ„ν•΄λ˜λŠ” 방법이 λ‹€λ₯΄λ‹€.

제1 μ •κ·œν˜•(1NF)

  • ν…Œμ΄λΈ”μ˜ 컬럼이 μ›μžκ°’(atomic value)을 갖도둝 ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것
  • κΈ°λ³Έ 킀에 λΆ€λΆ„ ν•¨μˆ˜ μ’…μ†λœ μ• νŠΈλ¦¬λ·°νŠΈκ°€ 쑴재
    • λΆ€λΆ„ ν•¨μˆ˜ 쒅속 : μ–΄λ–€ 속성 Yκ°€ λ‹€λ₯Έ 볡합 속성 X의 뢀뢄집합에 μ’…μ†ν•˜λŠ” 관계
      • ex) (학생 번호, κ°•μ’Œ 이름) → κ°•μ˜μ‹€, κ°•μ’Œ 이름 → κ°•μ˜μ‹€
      • 기본킀인 (학생 번호, κ°•μ’Œ 이름)으둜 κ°•μ˜μ‹€μ„ κ²°μ •ν•˜λŠ”λ°, 볡합 속성인 κΈ°λ³Έν‚€μ˜ λΆ€λΆ„ 집합인 κ°•μ’Œ 이름에 μ˜ν•΄ κ°•μ˜μ‹€ 컬럼이 결정될 수 μžˆλ‹€.
    • λΆ€λΆ„ ν•¨μˆ˜ 쒅속을 μ œκ±°ν•œ 것이 2NF

제 2 μ •κ·œν˜•(2NF)

  • 1NF이고
  • 킀에 μ†ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  μ• νŠΈλ¦¬λ·°νŠΈλ“€μ΄ κΈ°λ³Έ 킀에 μ™„μ „ ν•¨μˆ˜ 쒅속을 λ§Œμ‘±ν•˜λ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것
    • μ™„μ „ ν•¨μˆ˜ 쒅속 : κΈ°λ³Έν‚€μ˜ 뢀뢄집합이 κ²°μ •μžκ°€ λ˜μ–΄μ„  μ•ˆλœλ‹€.
  • A → B, B → C라면, A → C : μ• νŠΈλ¦¬λ·°νŠΈ CλŠ” μ• νŠΈλ¦¬λ·°νŠΈ A에 이행적 ν•¨μˆ˜ 쒅속
    • 이행적 ν•¨μˆ˜ 쒅속 : A → B 이고 B → C 일 λ•Œ, A → C λ₯Ό λ§Œμ‘±ν•˜λŠ” 관계
    • 이행적 ν•¨μˆ˜ 쒅속을 μ œκ±°ν•œ 것이 3NF

제 3 μ •κ·œν˜•(3NF)

  • 2NF이고
  • 후보 킀에 μ†ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  μ• νŠΈλ¦¬λ·°νŠΈλ“€μ΄ 후보 킀에 이행적 ν•¨μˆ˜ μ’…μ†λ˜μ§€ μ•Šλ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

보이슀/μ½”λ“œ μ •κ·œν˜•(BCNF = κ°•ν•œ 3NF)

  • 제 3 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것
    • 후보킀 : μŠˆνΌν‚€ 쀑 더 이상 쀄일 수 μ—†λŠ” ν˜•νƒœλ₯Ό 가진 것.
      • μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•¨
      • κΈ°λ³Έν‚€λ‘œ 선정될 수 μžˆλŠ” 후보
    • μŠˆνΌν‚€ : ν…Œμ΄λΈ”μ˜ 행을 κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” 속성 λ˜λŠ” μ†μ„±μ˜ 집합

제 4 μ •κ·œν˜•(4NF)

  • λ¦΄λ ˆμ΄μ…˜μ—μ„œ λ‹€μΉ˜ μ’…μ†λ˜μ§€ μ•Šλ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

제 5 μ •κ·œν˜•(5NF)

  • λ¦΄λ ˆμ΄μ…˜μ— μ‘΄μž¬ν•˜λŠ” 쑰인 쒅속이 후보 ν‚€λ₯Ό ν†΅ν•΄μ„œλ§Œ 성립이 λ˜λ„λ‘ν•˜λŠ” μ •κ·œν˜•

 

μ •κ·œν™”μ˜ 단점

  • ν…Œμ΄λΈ” μˆ˜κ°€ λ§Žμ•„μ§ˆμˆ˜λ‘ 쑰건결합, 즉 join의 λΆ€λ‹΄μœΌλ‘œμΈν•΄ μ‹œκ°„μ΄ 였래걸림
    • → μ—­μ •κ·œν™”(λΉ„μ •κ·œν™” λ˜λŠ” λ°˜μ •κ·œν™”): μ •κ·œν™”λœ λ¦΄λ ˆμ΄μ…˜μ„ 물리적 데이터 λͺ¨λΈλ§ κ³Όμ •μ—μ„œ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 쀑볡을 ν—ˆμš©ν•˜κ³ λΌλ„ λ‹€μ‹œ ν†΅ν•©ν•˜κ±°λ‚˜ λΆ„ν• ν•˜μ—¬ ꡬ쑰λ₯Ό μž¬μ‘°μ •ν•˜λŠ” 것
  • 'μ •κ·œν™” & ν…Œμ΄λΈ” 수 μ΅œμ ν™”' λΌλŠ” 두 마리 토끼λ₯Ό ν•œκΊΌλ²ˆμ— μž‘κΈ°λŠ” 어렀움
  • 4, 5,6NFλŠ” ν…Œμ΄λΈ” μˆ˜κ°€ λ„ˆλ¬΄ λ§Žμ•„μ§€λ―€λ‘œ μ‹€λ¬΄μ—μ„œ ν™œμš©ν•  κ°€μΉ˜κ°€ κ°€μž₯ 높은 것은 3NF, BCNFλΌλŠ” 결둠에 도달함

 

μ°Έκ³ 

'πŸ“ŒCS > DB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[DB] μΊμ‹œ, Redis  (0) 2021.04.18
[DB] Connection Pool  (0) 2021.04.18
[DB] N + 1 문제  (0) 2021.04.11
[DB] Index  (1) 2021.04.04
[SQL] 닀쀑정렬 ORDER BY  (1) 2020.01.09

λŒ“κΈ€