πŸ‘¨πŸ»β€πŸ«μ •κ·œν™”

eunsiverΒ·2023λ…„ 5μ›” 10일
0

λ°μ΄ν„°λ² μ΄μŠ€

λͺ©λ‘ 보기
7/9

μ •κ·œν™”κ°€ λ¬΄μ—‡μΈκ°€μš”?μ •κ·œν™”λ₯Ό ν•˜μ§€ μ•Šμ„ 경우, λ°œμƒν•  수 μžˆλŠ” μ΄μƒν˜„μƒμ— λŒ€ν•΄ μ„€λͺ…ν•΄ μ£Όμ„Έμš”.

β€’ 각 μ •κ·œν™”μ— λŒ€ν•΄, κ·Έ μ •κ·œν™”κ°€ μ§„ν–‰λ˜κΈ° μ „/ν›„μ˜ ν…Œμ΄λΈ”μ˜ 변화에 λŒ€ν•΄ μ„€λͺ…ν•΄ μ£Όμ„Έμš”.
β€’ μ •κ·œν™”κ°€ 무쑰건 μ’‹μ€κ°€μš”? 그렇지 μ•Šλ‹€λ©΄, μ–΄λ–€ μƒν™©μ—μ„œ μ—­μ •κ·œν™”λ₯Ό ν•˜λŠ”κ²Œ 쒋은지 μ„€λͺ…ν•΄ μ£Όμ„Έμš”.


βœπŸ»μ •κ·œν™”

  • μ΄μƒν˜„μƒμ΄ μžˆλŠ” λ¦΄λ ˆμ΄μ…˜μ„ λΆ„ν•΄ν•˜μ—¬ μ΄μƒν˜„μƒμ„ μ—†μ• λŠ” κ³Όμ •
  • μ΄μƒν˜„μƒμ΄ μ‘΄μž¬ν•˜λŠ” λ¦΄λ ˆμ΄μ…˜μ„ λΆ„ν•΄ν•˜μ—¬ μ—¬λŸ¬ 개의 λ¦΄λ ˆμ΄μ…˜μ„ 생성
  • λ‹¨κ³„λ³„λ‘œ κ΅¬λΆ„ν•˜μ—¬ μ •κ·œν˜•μ΄ λ†’μ•„μ§ˆμˆ˜λ‘ μ΄μƒν˜„μƒμ€ μ€„μ–΄λ“€κ²Œ λœλ‹€.

πŸ€ΉπŸ»β€β™€οΈ μ΄μƒν˜„μƒμ΄λž€?

  • μ‚­μ œμ΄μƒ(deletion anomly) : νˆ¬ν”Œ μ‚­μ œ μ‹œ 같이 μ €μž₯된 λ‹€λ₯Έ μ •λ³΄κΉŒμ§€ μ—°μ‡„μ μœΌλ‘œ μ‚­μ œλ˜λŠ” ν˜„μƒ
    β†’ μ—°μ‡„μ‚­μ œ(triggered deletion) 문제 λ°œμƒ

  • μ‚½μž…μ΄μƒ(insertion anomly) : νˆ¬ν”Œ μ‚½μž… μ‹œ νŠΉμ • 속성에 ν•΄λ‹Ήν•˜λŠ” 값이 μ—†μ–΄ NULL 값을 μž…λ ₯ν•΄μ•Ό ν•˜λŠ” ν˜„μƒ
    β†’ NULL κ°’ 문제 λ°œμƒ

  • μˆ˜μ •μ΄μƒ(update anomly) : νˆ¬ν”Œ μˆ˜μ • μ‹œ μ€‘λ³΅λœ λ°μ΄ν„°μ˜ μΌλΆ€λ§Œ μˆ˜μ •λ˜μ–΄ λ°μ΄ν„°μ˜ 뢈일치 λ¬Έμ œκ°€ μΌμ–΄λ‚˜λŠ” ν˜„μƒ
    β†’ 뢈일치(inconsistency) 문제 λ°œμƒ


πŸ‘πŸ»μž₯점

  • λ°μ΄ν„°λ² μ΄μŠ€ λ³€κ²½ μ‹œ 이상 ν˜„μƒ(Anomaly)을 제거
  • μ •κ·œν™”λœ λ°μ΄ν„°λ² μ΄μŠ€ κ΅¬μ‘°μ—μ„œλŠ” μƒˆλ‘œμš΄ 데이터 ν˜•μ˜ μΆ”κ°€λ‘œ μΈν•œ ν™•μž₯ μ‹œ, κ·Έ ꡬ쑰λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λ˜κ±°λ‚˜ μΌλΆ€λ§Œ 변경해도 λœλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ—°λ™λœ μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ΅œμ†Œν•œμ˜ 영ν–₯λ§Œμ„ 미치게 λ˜μ–΄ μ‘μš©ν”„λ‘œκ·Έλž¨μ˜ 생λͺ…을 μ—°μž₯μ‹œν‚¨λ‹€.

πŸ‘ŽπŸ»λ‹¨μ 

  • λ¦΄λ ˆμ΄μ…˜μ˜ λΆ„ν•΄λ‘œ 인해 λ¦΄λ ˆμ΄μ…˜ κ°„μ˜ JOIN연산이 λ§Žμ•„μ§„λ‹€.
  • 쑰인이 많이 λ°œμƒν•˜μ—¬ μ„±λŠ₯ μ €ν•˜κ°€ λ‚˜νƒ€λ‚˜λ©΄ λ°˜μ •κ·œν™”(De-normalization)λ₯Ό μ μš©ν•  μˆ˜λ„ μžˆλ‹€.

πŸ––πŸ»λ°˜μ •κ·œν™”(=μ—­μ •κ·œν™”)

μ •κ·œν™”λœ μ—”ν‹°ν‹°, 속성, 관계에 λŒ€ν•΄ μ‹œμŠ€ν…œμ˜ μ„±λŠ₯ν–₯상과 개발과 운영의 λ‹¨μˆœν™”λ₯Ό μœ„ν•΄ 쀑볡, 톡합, 뢄리 등을 μˆ˜ν–‰ν•˜λŠ” 데이터 λͺ¨λΈλ§μ˜ 기법

  • 즉, μ„±λŠ₯ ν–₯상을 μœ„ν•΄ μ •κ·œν™”λœ 데이터 λͺ¨λΈμ—μ„œ 쀑볡, 톡합, 뢄리 등을 μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“  과정을 μ˜λ―Έν•œλ‹€. λ°˜μ •κ·œν™”λ₯Ό μ μš©ν•˜λ©΄ 데이터 무결성이 깨질 수 μžˆλŠ” μœ„ν—˜μ΄ μžˆλ‹€.

  • μ •κ·œν™”λœ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ„±λŠ₯을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ „λž΅

  • 데이터λ₯Ό μ‘°νšŒν•  λ•Œ 쑰인으둜 μΈν•œ μ„±λŠ₯μ €ν•˜κ°€ μ˜ˆμƒλ  λ•Œ μ„±λŠ₯이 μ €ν•˜λ  것이 μ˜ˆμƒλ˜λŠ” 경우 μˆ˜ν–‰ν•œλ‹€.

  • μ—­μ •κ·œν™”λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ λΉ„μš©μ„ μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ 쀑볡을 ν—ˆμš©ν•˜λ©° Entityλ₯Ό λ‹€μ‹œ ν†΅ν•©ν•˜κ±°λ‚˜ λΆ„ν• ν•˜μ—¬ μ •κ·œν™” 과정을 톡해 λ„μΆœλœ DB ꡬ쑰λ₯Ό μž¬μ‘°μ •ν•˜λŠ” 과정이닀.

  • Join이 λ„ˆλ¬΄ λ§Žμ•„μ§€λŠ” DB 섀계와 μΏΌλ¦¬λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μ‹œκ°„μ„ μ¦κ°€μ‹œν‚€λŠ” λ¬Έμ œκ°€ 있기 λ•Œλ¬Έμ— λͺ¨λ“  μ£Όμš” Entityλ₯Ό λΆ„λ¦¬ν•˜λŠ” 것이 쒋은 것이 μ•„λ‹ˆλΌ DB의 μ „λ°˜μ μΈ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλŠ” ꡬ쑰화 과정을 κ±°μΉ˜λŠ” 것이 ν•„μš”ν•˜λ‹€.


πŸ§Ύμ •κ·œν™” 절차

  • μ •κ·œν™”λŠ” 제1 μ •κ·œν™”λΆ€ν„° 제5 μ •κ·œν™”κΉŒμ§€ μžˆμ§€λ§Œ 제3 μ •κ·œν™”κΉŒμ§€λ§Œ μˆ˜ν–‰

πŸ•΅πŸ»β€β™€οΈμ œ 1μ •κ·œν˜•(1NF)

λͺ¨λ“  속성 값이 μ›μžκ°’μ„ κ°€μ§ˆ λ•Œ

고객취미듀(이름, μ·¨λ―Έλ“€) λ¦΄λ ˆμ΄μ…˜μ„ 고객취미(이름, μ·¨λ―Έ) λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ λ°”κΎΈμ–΄ μ €μž₯ν•˜λ©΄ 제 1μ •κ·œν˜•μ„ λ§Œμ‘±ν•¨


제 2μ •κ·œν™”

제 1μ •κ·œν˜•μ΄κ³  κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성이 기본킀에 μ™„μ „ ν•¨μˆ˜ 쒅속일 λ•Œ

μ™„μ „ ν•¨μˆ˜ 쒅속?

  • κΈ°λ³Έν‚€μ˜ 뢀뢄집합이 κ²°μ •μžκ°€ λ˜μ–΄μ„  μ•ˆλœλ‹€λŠ” 것
  • μ•„λž˜ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€λŠ” {학생 번호, κ°•μ’Œμ΄λ¦„} μ΄λΌλŠ” 볡합킀이고 성적을 κ²°μ •ν•˜κ³  μžˆλ‹€.
    그런데 μ—¬κΈ°μ„œ 'κ°•μ˜μ‹€' μ»¬λŸΌμ€ κΈ°λ³Έ ν‚€μ˜ λΆ€λΆ„μ§‘ν•œμΈ {κ°•μ’Œμ΄λ¦„}에 μ˜ν•΄ 결정될 수 μžˆλ‹€.
    이런 κ²½μš°κ°€ λ°”λ‘œ κΈ°λ³Έν‚€μ˜ λΆ€λΆ„ 집합(κ°•μ’Œμ΄λ¦„)이 κ²°μ •μž(κ°•μ˜μ‹€μ„ κ²°μ •)κ°€ λ˜λŠ” κ²½μš°μ΄λ‹€.

λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ°•μ˜μ‹€μ΄ 곡학관 210으둜 λ³€κ²½λ˜μ—ˆλ‹€κ³  ν•˜μž.

그럼 λͺ¨λ“  λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ°•μ˜μ‹€μ„ μ°Ύμ•„ λ³€κ²½ν•΄μ£Όμ–΄μ•Ό ν•˜λŠ”λ° λ§Œμ•½ 데이터가 μ—„μ²­ λ§Žμ„ λ•ŒλŠ” λ¬Έμ œκ°€ λ°œμƒν•˜κ² μ§€ μ•Šμ€κ°€?!

μ‰½κ²Œ ν˜„μž¬ ν…Œμ΄λΈ” μ£Όμ œμ™€ 별 상관이 μ—†λŠ” μ»¬λŸΌμ„ λ‹€λ₯Έ ν…Œμ΄λΈ”λ‘œ λΉΌλŠ” μž‘μ—…μ΄λΌκ³  μƒκ°ν•˜μž!


제 3μ •κ·œν™”

제 2μ •κ·œν˜•μ΄κ³  κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성이 기본킀에 비이행적(non-transitive)으둜 쒅속할 λ•Œ(직접 쒅속)

이행적 쒅속

  • A β†’ B, B β†’ Cκ°€ 성립할 λ•Œ A β†’ Cκ°€ μ„±λ¦½λ˜λŠ” ν•¨μˆ˜ 쒅속성

이λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ 이런 μ‹μœΌλ‘œ (학생 번호, κ°•μ’Œμ΄λ¦„) ν…Œμ΄λΈ”κ³Ό (κ°•μ’Œ 이름, μˆ˜κ°•λ£Œ) ν…Œμ΄λΈ”λ‘œ λΆ„ν•΄ν•˜λ©΄ λœλ‹€.

πŸ“ μ™œ 이행적 쒅속을 μ œκ±°ν•΄μ•Ό ν• κΉŒ?

예λ₯Όλ“€μ–΄μ„œ 학생 λ²ˆν˜Έκ°€ 501인 학생은 데이터 베이슀 κ°•μ’Œλ₯Ό μˆ˜κ°•ν•  것이고 μˆ˜κ°•λ£Œλ‘œ 2λ§Œμ›μ„ μ§€λΆˆν•  것이닀.

이 λ•Œ 이행적 쒅속이 ν…Œμ΄λΈ”μ— μ‘΄μž¬ν•œλ‹€λ©΄ 501 학생이 μˆ˜κ°•ν•  κ°•μ’Œλ₯Ό 슀포츠 κ²½μ˜ν•™μœΌλ‘œ
λ³€κ²½ν•œλ‹€λ©΄ μ›λž˜ 슀포츠 κ²½μ˜ν•™μ€ 만 μ˜€μ²œμ›μΈλ°, 2λ§Œμ›μ— μˆ˜κ°•ν•˜κ²Œ λ˜λŠ” 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

λ¬Όλ‘  μˆ˜κ°•λ£Œ μ»¬λŸΌλ„ 같이 변경해쀄 μˆ˜λ„ μžˆμ§€λ§Œ μ΄λ ‡κ²Œ 되면 λ²ˆκ±°λ‘­λ‹€.


BCNF

ν•¨μˆ˜ 쒅속성 X β†’ Yκ°€ 성립할 λ•Œ λͺ¨λ“  κ²°μ •μž Xκ°€ 후보킀이면 BCNF μ •κ·œν˜•μ΄λΌκ³  함

  • 이 ν…Œμ΄λΈ”μ—μ„œ κΈ°λ³Έν‚€λŠ” {학생 번호, νŠΉκ°•μ΄λ¦„} 이고 ꡐ수λ₯Ό κ²°μ •ν•˜κ³  μžˆλ‹€.
  • λ˜ν•œ κ΅μˆ˜λŠ” νŠΉκ°• 이름을 κ²°μ •ν•  수 μžˆλ‹€.
  • μ—¬κΈ°μ„œ κ΅μˆ˜λŠ” νŠΉκ°•μ΄λ¦„μ„ κ²°μ •ν•˜λŠ” κ²°μ •μž μ΄μ§€λ§Œ ν›„λ³΄ν‚€λŠ” μ•„λ‹ˆλ‹€.
  • 이런 경우 데이터가 μ€‘λ³΅λ˜κ³  κΉ€κ΅μˆ˜μ˜ νŠΉκ°•μ΄λ¦„μ΄ μ†Œμ…œλ„€νŠΈμ›Œν¬μ˜ μ΄ν•΄λ‘œ λ°”λ€Œμ—ˆλ‹€λ©΄
    λ‘κ°œμ˜ rowλ₯Ό κ°±μ‹ ν•΄μ•Ό ν•˜λŠ” λ¬Έμ œκ°€ μžˆλ‹€.

νŠΉκ°•μˆ˜κ°• λ¦΄λ ˆμ΄μ…˜μ—μ„œ μ΄μƒν˜„μƒμ„ μΌμœΌν‚€λŠ” (ꡐ수, νŠΉκ°•μ΄λ¦„)을 뢄해함


κ·Έλ‹ˆκΉŒ μ‰¬μš΄ 말둜 μ •λ¦¬ν•˜μžλ©΄

μ •κ·œν™”λŠ” ν…Œμ΄λΈ”μ„ λΆ„λ¦¬ν•΄μ„œ 이상 ν˜„μƒμ„ μ—†μ• λŠ” 거라고도 ν•  수 있고 쀑볡을 μ—†μ• λŠ” 거라고도 ν•  수 μžˆλŠ” 건데

  • 제 1 μ •κ·œν™”λŠ” λͺ¨λ“  컬럼이 ν•˜λ‚˜μ˜ κ°’λ§Œ κ°–κ²Œ ν•˜λŠ” 것

  • 제 2 μ •κ·œν™”λŠ” κ±°κΈ°λ‹€κ°€ ν”ŒλŸ¬μŠ€λ‘œ κΈ°λ³Έν‚€μ˜ λΆ€λΆ„ 집합이 κ²°μ •μžκ°€ 되면 μ•ˆλœλ‹€λŠ” 것

  • 제 3 μ •κ·œν™”λŠ” ν”ŒλŸ¬μŠ€λ‘œ a->b b->cμΌλ•Œ a->c도 λ§Œμ‘±ν•˜λ©΄ μ•ˆ λœλ‹€λŠ” 것

  • BCNF μ •κ·œν™”λŠ” ν”ŒλŸ¬μŠ€λ‘œ κ²°μ •μžμΈλ° 후보킀가 μ•„λ‹Œκ²Œ 있으면 μ•ˆ λœλ‹€λŠ” 것


μ°Έκ³ 
https://code-lab1.tistory.com/48
https://youtu.be/Y1FbowQRcmI

profile
Let's study!

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보