λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Database

[ Database ] μ •κ·œν™”, λΉ„μ •κ·œν™”, μ—­μ •κ·œν™”

728x90
λ°˜μ‘ν˜•

πŸ‘¨‍πŸ’» μ •κ·œν™”(Normalization)

μ •κ·œν™”μ˜ κΈ°λ³Έ λͺ©ν‘œλŠ” 'ν…Œμ΄λΈ” 간에 μ€‘λ³΅λœ 데이터λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€'λŠ” 것이닀. μ€‘λ³΅λœ 데이터λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨ 무결성을 μœ μ§€ν•  수 있으며 DB의 μ €μž₯ μš©λŸ‰ μ—­μ‹œ 쀄일 수 μžˆλ‹€.  μ΄λŸ¬ν•œ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” μ •κ·œν™” 단계가 μ •μ˜λ˜μ–΄ μžˆλŠ”λ° ν…Œμ΄λΈ”μ„ μ–΄λ–»κ²Œ λΆ„ν•΄λ˜λŠ”μ§€μ— 따라 μ •κ·œν™” 단계가 달라진닀.

 

[ 제 1 μ •κ·œν™” ]

⁉️ ν…Œμ΄λΈ”μ˜ 컬럼이 μ›μžκ°’(Atomic Value, ν•˜λ‚˜μ˜ κ°’)을 갖도둝 ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

β˜‘οΈ μœ„μ˜ μΆ”μ‹ μˆ˜μ™€ λ°•μ„Έλ¦¬λŠ” μ—¬λŸ¬ 개의 μ·¨λ―Έλ₯Ό κ°€μ§€κ³  있기 λ•Œλ¬Έμ— 제1 μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜μ§€ λͺ»ν•˜κ³  μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 이λ₯Ό 제 1μ •κ·œν™”ν•˜μ—¬ λΆ„ν•΄ν•˜λ©΄ 였λ₯Έμͺ½ ν…Œμ΄λΈ”κ³Ό κ°™λ‹€.

 

[ 제 2 μ •κ·œν™” ]

⁉️ 제1 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ μ™„μ „ ν•¨μˆ˜μ  쒅속을 λ§Œμ‘±ν•˜λŠ” ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

 

πŸ’‘ μ™„μ „ ν•¨μˆ˜μ  쒅속 : κΈ°λ³Έν‚€μ˜ 뢀뢄집합이 κ²°μ •μžκ°€ λ˜μ–΄μ„  μ•ˆλœλ‹€λŠ” 것

β˜‘οΈ μœ„ ν…Œμ΄λΈ”μ—μ„œ κΈ°λ³Έν‚€λŠ” (ν•™μƒλ²ˆν˜Έ, κ°•μ’Œμ΄λ¦„)으둜 볡합킀이닀. 그리고 (ν•™μƒλ²ˆν˜Έ, κ°•μ’Œμ΄λ¦„)인 κΈ°λ³Έν‚€λŠ” 성적을 κ²°μ •ν•˜κ³  μžˆλ‹€. 그런데 μ—¬κΈ°μ„œ κ°•μ˜μ‹€μ΄λΌλŠ” μ»¬λŸΌμ€ κΈ°λ³Έν‚€μ˜ 뢀뢄집합인 κ°•μ’Œμ΄λ¦„μ— μ˜ν•΄ 결정될 수 μžˆλ‹€.

➑️ κΈ°λ³Έν‚€(ν•™μƒλ²ˆν˜Έ, κ°•μ’Œμ΄λ¦„)의 뢀뢄킀인 κ°•μ’Œμ΄λ¦„μ΄ κ²°μ •μžμ΄κΈ° λ•Œλ¬Έμ— μœ„μ˜ ν…Œμ΄λΈ”μ˜ 경우 λ‹€μŒκ³Ό 같이 기쑴의 ν…Œμ΄λΈ”μ—μ„œ κ°•μ˜μ‹€μ„ λΆ„ν•΄ν•˜μ—¬ λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ κ΄€λ¦¬ν•˜μ—¬ 제2 μ •κ·œν˜•μ„ λ§Œμ‘±μ‹œν‚¬ 수 μžˆλ‹€.

 

[ 제 3 μ •κ·œν™” ]

⁉️ 제2 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ 이행적 쒅속을 없애도둝 ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

 

πŸ’‘ 이행적 쒅속 :  A -> B, B -> Cκ°€ 성립할 λ•Œ A -> Cκ°€ μ„±λ¦½λ˜λŠ” 것

β˜‘οΈ 기쑴의 ν…Œμ΄λΈ”μ—μ„œ 학생 λ²ˆν˜ΈλŠ” κ°•μ’Œ 이름을 κ²°μ •ν•˜κ³  있고 κ°•μ’Œ 이름은 μˆ˜κ°•λ£Œλ₯Ό κ²°μ •ν•˜κ³  μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 이λ₯Ό (학생 번호, κ°•μ’Œ 이름) ν…Œμ΄λΈ”κ³Ό (κ°•μ’Œ 이름, μˆ˜κ°•λ£Œ) ν…Œμ΄λΈ”λ‘œ λΆ„ν•΄ν•΄μ•Ό ν•œλ‹€.

β˜‘οΈ 이행적 쒅속을 μ œκ±°ν•˜λŠ” μ΄μœ λŠ” ν•™μƒλ²ˆν˜Έ -> κ°•μ’Œμ΄λ¦„ -> μˆ˜κ°•λ£Œ μΌλ•Œ κ°•μ’Œ 이름이 변경될 λ•Œ μˆ˜κ°•λ£Œκ°€ λ³€κ²½λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€. κ°•μ’Œ 이름에 맞게 μˆ˜κ°•λ£Œλ₯Ό λ‹€μ‹œ λ³€κ²½ν•˜λ©΄ λ˜μ§€λ§Œ μ΄λŸ¬ν•œ λ²ˆκ±°λ‘œμ›€μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 제3 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œλ‹€.

 

[ BCNF μ •κ·œν™” ]

⁉️ 제3 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

β˜‘οΈ νŠΉκ°•μˆ˜κ°• ν…Œμ΄λΈ”μ—μ„œ κΈ°λ³Έν‚€λŠ” (ν•™μƒλ²ˆν˜Έ, νŠΉκ°•μ΄λ¦„)이닀. 그리고 κΈ°λ³Έν‚€ (ν•™μƒλ²ˆν˜Έ, νŠΉκ°•μ΄λ¦„)은 ꡐ수λ₯Ό κ²°μ •ν•˜κ³  μžˆλ‹€. κ΅μˆ˜λŠ” νŠΉκ°•μ΄λ¦„μ„ κ²°μ •ν•˜κ³  μžˆλ‹€.

β˜‘οΈ 그런데 λ¬Έμ œλŠ” κ΅μˆ˜κ°€ νŠΉκ°•μ΄λ¦„μ„ κ²°μ •ν•˜λŠ” κ²°μ •μžμ§€λ§Œ 후보킀가 μ•„λ‹ˆλΌλŠ” 점이닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— BCNF μ •κ·œν™”λ₯Ό λ§Œμ‘±μ‹œν‚€κΈ° μœ„ν•΄μ„œ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•΄μ•Ό ν•œλ‹€.


πŸ‘¨‍πŸ’» λΉ„μ •κ·œν™”(Unnormalized form), μ—­μ •κ·œν™”(Denormalization)

⁉️ μ—­μ •κ·œν™”μ™€ λΉ„μ •κ·œν™”κ°€ 같은 의미둜 μ“°μ΄λŠ” 것 κ°™μ§€λ§Œ μ—„μ—°νžˆ λ§ν•˜λ©΄ λ‹€λ₯΄λ‹€.

 

➑️ λΉ„μ •κ·œν™” : μ •κ·œν™”λœ ν…Œμ΄λΈ”(λ¦΄λ ˆμ΄μ…˜)을 읽기성λŠ₯ ν–₯상을 μœ„ν•΄ ν…Œμ΄λΈ”μ„ λ‹€μ‹œ ν•©μΉ˜λŠ” 방법이닀. (μ—­μ •κ·œν™”, Entity 합체, Entity λΆ„ν•΄ λ“± μ—¬λŸ¬ 방법이 μžˆμ§€λ§Œ μ—­μ •κ·œν™”κ°€ 일반적)

➑️ μ—­μ •κ·œν™” : μ •κ·œν™”λœ ν…Œμ΄λΈ”μ„ λΉ„μ •κ·œν™” μƒνƒœλ‘œ λ§Œλ“€κΈ° μœ„ν•œ 방법 쀑 ν•˜λ‚˜μ΄λ‹€.(λΉ„μ •κ·œν™”κ°€ 더 ν¬κ΄„μ μž„)

 β˜‘️ λΉ„μ •κ·œν™”λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ™„λ²½ν•œ ꡬ쑰섀계λ₯Ό ν¬κΈ°ν•˜κ³  λ°μ΄ν„°μ˜ 무결성을 λ–¨μ–΄νŠΈλ¦¬λŠ” λŒ€μ‹  κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ 읽기 μ„±λŠ₯ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•¨μ΄λ‹€.

β˜‘οΈ (3κ΅μ‹œ μ„ μƒλ‹˜μ˜ κ°•μ˜μ™€ μˆ˜κ°•λ£Œ)λ₯Ό μ•Œκ³  μ‹Άλ‹€λ©΄ μ •κ·œν™”λœ ν…Œμ΄λΈ”μ—μ„œ

  • <강사>ν…Œμ΄λΈ”μ—μ„œ (κ°•μ˜μ‹œκ°„, 이름, λ‹΄λ‹Ήμˆ˜μ—…)을 ν™•μΈν•˜κ³ ,
  • <μˆ˜μ—…>ν…Œμ΄λΈ”μ—μ„œ (μˆ˜μ—…μ½”λ“œ)λ₯Ό ν™•μΈν•˜κ³ 
  • <μˆ˜κ°•λ£Œ>ν…Œμ΄λΈ”μ—μ„œ (μˆ˜κ°•λ£Œ)λ₯Ό 확인해야 ν•œλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” 3κ°€μ§€ ν…Œμ΄λΈ”μ„ κ°™μ€ν‚€λ‘œ JOIN ν•˜μ—¬ 데이터 값을 μ°ΎλŠ”λ‹€. λ§Œμ•½ ν…Œμ΄λΈ” μˆ˜κ°€ 더 μ¦κ°€ν•˜λ©΄ λ§Žμ€ JOIN을 μ‚¬μš©ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 데이터 읽기 νš¨μœ¨μ„±μ΄ λ–¨μ–΄μ§„λ‹€. 

➑️ κ·Έλž˜μ„œ <μ‹œκ°„ν‘œ> ν…Œμ΄λΈ”μ²˜λŸΌ λΉ„μ •κ·œν™”λ₯Ό μ‹œν‚€λŠ” 것이닀.

 

⁉️ ν•˜μ§€λ§Œ λΉ„μ •κ·œν™”λ₯Ό ν•  λ•Œ κ³ λ €ν•΄μ•Ό ν•  점이 μžˆλ‹€.

  • 무결성(λ°μ΄ν„°μ˜ μ •ν™•μ„±)이 λ–¨μ–΄μ§€λŠ” 것에 주의
  • 읽기(쑰회)μ†λ„λŠ” λΉ¨λΌμ§€μ§€λ§Œ μ“°κΈ°(μ‚½μž…, μˆ˜μ •, μ‚­μ œ) μ†λ„λŠ” λŠλ €μ§„λ‹€.
  • μ €μž₯κ³΅κ°„μ˜ 효율이 λ–¨μ–΄μ§„λ‹€.
  • μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ ΅λ‹€.

πŸ’‘ 이런 λ¬Έμ œκ°€ μžˆμŒμ—λ„ λΉ„μ •κ·œν™”λ₯Ό ν•˜λŠ” μ΄μœ λŠ” μ˜€λ‘œμ§€ μ„±λŠ₯ λ¬Έμ œκ°€ μžˆλŠ”(읽기 μž‘μ—…μ΄ 많이 ν•„μš”ν•œ) ν…Œμ΄λΈ” λ•Œλ¬Έμ΄λ‹€.

728x90
λ°˜μ‘ν˜•