πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€/κ°œλ…

[DB] λ°μ΄ν„°λ² μ΄μŠ€ ν‚€(Key) κ°œλ… & ν‚€(Key) μ’…λ₯˜

Amenable 2023. 6. 13. 18:55

πŸ“™ 1. ν‚€(Key)

  λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν‚€(Key)λž€ 쑰건에 λ§Œμ‘±ν•˜λŠ” νŠœν”Œμ„ μ°Ύκ±°λ‚˜ μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•  λ•Œ λ‹€λ₯Έ νŠœν”Œλ“€κ³Ό ꡬ별할 수 μžˆλŠ” 기쀀이 λ˜λŠ” 속성이닀.

  ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό 쑰금 더 λͺ…ν™•ν•˜κ²Œ ν•˜κ³  ν…Œμ΄λΈ” 자체의 인덱슀λ₯Ό μœ„ν•΄ μ„€μ •λœ μž₯μΉ˜μ΄κΈ°λ„ ν•˜λ‹€.

 

 

πŸ“™ 2. μœ μΌμ„± & μ΅œμ†Œμ„±

  ν‚€μ˜ μ’…λ₯˜λ₯Ό μ•Œμ•„λ³΄κΈ°μ— μ•žμ„œμ„œ 킀듀을 κ΅¬λΆ„ν•˜λŠ” μ„±μ§ˆμΈ 'μœ μΌμ„±'κ³Ό 'μ΅œμ†Œμ„±'에 λŒ€ν•΄μ„œ λ¨Όμ € μ•Œμ•„λ³΄μž.

πŸ“Œ 1. μœ μΌμ„±

  μœ μΌμ„±μ΄λž€ ν•˜λ‚˜μ˜ ν‚€λ₯Ό μ΄μš©ν•˜μ—¬ νŠœν”Œμ„ μœ μΌν•˜κ²Œ 식별할 수 μžˆλŠ” μ„±μ§ˆμ„ λ§ν•œλ‹€.

  'ν•™λ²ˆ, 주민번호, 이름'으둜 κ΅¬μ„±λœ ν…Œμ΄λΈ”μ΄ μžˆλ‹€κ³  ν•˜μž.

  μœ μΌμ„±μ„ λ§Œμ‘±ν•˜λŠ” ν‚€λ₯Ό λ§Œλ“ λ‹€λ©΄ {ν•™λ²ˆ}, {주민번호}, {ν•™λ²ˆ, 주민번호}, {ν•™λ²ˆ, 주민번호, 이름}으둜 이루어진 ν‚€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. ν‚€λ₯Ό μ΄μš©ν•΄μ„œ κ°κ°μ˜ νŠœν”Œμ„ κ΅¬λΆ„ν•  μˆ˜ μžˆμœΌλ―€λ‘œ, μ΄λŸ¬ν•œ ν‚€λ“€μ„ μœ μΌμ„±μ„ κ°€μ‘Œλ‹€κ³  ν•  μˆ˜ μžˆλ‹€.

πŸ“Œ 2. μ΅œμ†Œμ„±

  μ΅œμ†Œμ„±μ΄λž€ ν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” 속성듀 쀑 κΌ­ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μ†μ„±λ“€λ‘œλ§Œ ν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” μ„±μ§ˆμ„ λ§ν•œλ‹€.

  μœ„μ—μ„œ μ‚΄νŽ΄λ΄€λ˜ κ²ƒμ²˜λŸΌ {ν•™λ²ˆ}, {주민번호}, {ν•™λ²ˆ, μ£Όλ―Όλ²ˆν˜Έ}, {ν•™λ²ˆ, μ£Όλ―Όλ²ˆν˜Έ, μ΄λ¦„}으둜 μ΄λ£¨μ–΄μ§„ ν‚€λ“€μ€ μœ μΌμ„±μ„ λ§Œμ‘±ν•œλ‹€.

  {ν•™λ²ˆ}으둜 이루어진 ν‚€λŠ” 속성을 1개, {주민번호}둜 이루어진 ν‚€λŠ” 속성을 1개, {ν•™λ²ˆ, 주민번호}둜 이루어진 ν‚€λŠ” 속성을 2개, {ν•™λ²ˆ, 주민번호, 이름}으둜 이루어진 ν‚€λŠ” 속성을 3개 μ‚¬μš©ν•˜μ˜€λ‹€.

이런 경우 μ΅œμ†Œν•œμ˜ 속성 개수인 1개λ₯Ό μ‚¬μš©ν•œ {ν•™λ²ˆ}을 μ΄μš©ν•œ 킀와 {주민번호}λ₯Ό μ΄μš©ν•œ ν‚€κ°€ μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•˜κ³ , 속성을 2개 λ˜λŠ” 3개λ₯Ό μ‚¬μš©ν•œ {ν•™λ²ˆ, 주민번호}, {ν•™λ²ˆ, 주민번호, 이름}λ₯Ό μ΄μš©ν•œ ν‚€λŠ” μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•˜μ§€ λͺ»ν•œλ‹€.

 

 

πŸ“™ 3. ν‚€(Key) μ’…λ₯˜

πŸ”‘ 1. μŠˆνΌν‚€ (Super Key)

πŸ“Œ 1. μ •μ˜

μœ μΌμ„±μ„ λ§Œμ‘±ν•˜λŠ” ν‚€

πŸ“Œ 2. μ˜ˆμ‹œ

  • ν•™λ²ˆ → κ°€λŠ₯
  • 주민번호 → κ°€λŠ₯
  • ν•™λ²ˆ + 주민번호 → κ°€λŠ₯
  • 이름 → λΆˆκ°€λŠ₯ (이름이 쀑볡 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έ)

 

πŸ”‘ 2. ν›„보킀 (Candidate Key)

πŸ“Œ 1. μ •μ˜

μœ μΌμ„±κ³Ό μ΅œμ†Œμ„±μ„ λ§Œμ‘±ν•˜λŠ” ν‚€

πŸ“Œ 2. μ˜ˆμ‹œ

  • ν•™λ²ˆ → κ°€λŠ₯ (μœ μΌμ„± O, μ΅œμ†Œμ„± O)
  • 주민번호 → κ°€λŠ₯ (μœ μΌμ„± O, μ΅œμ†Œμ„± O)
  • ν•™λ²ˆ + 주민번호 → λΆˆκ°€λŠ₯ (μœ μΌμ„± O, μ΅œμ†Œμ„± X)
  • 이름 → λΆˆκ°€λŠ₯ (μœ μΌμ„± X)

 

πŸ”‘ 3. κΈ°λ³Έν‚€ (Primary Key)

πŸ“Œ 1. μ •μ˜

ν›„λ³΄ν‚€μ—μ„œ μ„ νƒλœ ν‚€

πŸ“Œ 2. μ˜ˆμ‹œ

(μ•„λž˜μ—μ„œ λŒ€μ²΄ν‚€μ™€ ν•¨κ»˜ μ˜ˆμ‹œλ₯Ό λ“€μ–΄ μ„€λͺ…)

πŸ“Œ 3. νŠΉμ§•

  • NULL λΆˆκ°€λŠ₯
  • μ€‘λ³΅λœ 값을 κ°€μ§ˆ 수 μ—†λ‹€.
  • ν…Œμ΄λΈ”μ—μ„œ κΈ°λ³Έν‚€λŠ” 였직 1개만 μ§€μ •ν•  수 μžˆλ‹€.

 

πŸ”‘ 4. λŒ€μ²΄ν‚€ (Alternate Key)

πŸ“Œ 1. μ •μ˜

후보킀 μ€‘μ—μ„œ κΈ°λ³Έν‚€λ‘œ μ„ νƒλ˜μ§€ μ•Šμ€ ν‚€

πŸ“Œ 2. μ˜ˆμ‹œ

ν›„λ³΄ν‚€μ—λŠ” {ν•™λ²ˆ}, {주민번호}κ°€ μžˆλ‹€.
λ§Œμ•½ {ν•™λ²ˆ}을 κΈ°λ³Έν‚€λ‘œ μ„ νƒν•œλ‹€λ©΄, {주민번호}λŠ” λŒ€μ²΄ν‚€κ°€ 됨

 

πŸ”‘ 5. μ™Έλž˜ν‚€ (Foreign Key)

πŸ“Œ 1. μ •μ˜

λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€λ₯Ό κ·ΈλŒ€λ‘œ μ°Έμ‘°ν•˜λŠ” ν‚€

πŸ“Œ 2. μ˜ˆμ‹œ

πŸ“Œ 3. νŠΉμ§•

  • NULL κ°€λŠ₯
  • κ°œμ²΄μ™€μ˜ 관계λ₯Ό μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.
  • μ™Έλž˜ν‚€λ‘œ μ§€μ •λ˜λ©΄ μ°Έμ‘° ν…Œμ΄λΈ”μ˜ 기본킀에 μ—†λŠ” 값은 μž…λ ₯ν•  수 μ—†λ‹€. (μ°Έμ‘° 무결성 쑰건)
  • 쀑볡 κ°€λŠ₯

 

ν•΄λ‹Ή 글은
00yubin00 λ‹˜μ˜ '[DB] ν‚€μ˜ μ’…λ₯˜, μ΅œμ†Œμ„±κ³Ό μœ μΌμ„±',
Inpa λ‹˜μ˜ '[DB] λ°μ΄ν„°λ² μ΄μŠ€ ν‚€(Key) μ’…λ₯˜ 정리',
Limky λ‹˜μ˜ '[DataBase] ν‚€(Key)의 κ°œλ… 및 μ’…λ₯˜',
Gyoogle λ‹˜μ˜ 'ν‚€(Key)',
주홍철 λ‹˜μ˜ '면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ'
λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.