[Computer Science][Database] 🌟 λ°μ΄ν„°λ² μ΄μŠ€ μ •κ·œν™” 🌟

κΉ€μƒμš±Β·2024λ…„ 10μ›” 2일
0
post-thumbnail

λ°μ΄ν„°λ² μ΄μŠ€ 섀계λ₯Ό ν•  λ•Œ, 데이터λ₯Ό 효율적으둜 μ €μž₯ν•˜κ³  쀑볡을 μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ μ •κ·œν™”(Normalization) 과정을 거치게 λ©λ‹ˆλ‹€. 쀑볡 데이터λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ 무결성을 μœ μ§€ν•˜λ©΄μ„œλ„ DB μ €μž₯ μš©λŸ‰μ„ 효율적으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜€λŠ˜μ€ 고객과 μ£Όλ¬Έ 데이터λ₯Ό μ˜ˆμ‹œλ‘œ λ“€μ–΄, μ •κ·œν™”μ˜ 각 단계λ₯Ό μ„€λͺ…ν•΄ λ“œλ¦΄κ²Œμš”! πŸŽ‰


πŸ—οΈ λ°μ΄ν„°λ² μ΄μŠ€ μ •κ·œν™”μ˜ λͺ©μ  πŸš€

1️⃣ 데이터 쀑볡 제거 및 λΆˆν•„μš”ν•œ 데이터 μ΅œμ†Œν™” πŸ—‘οΈ

  • 데이터 쀑볡이 λ°œμƒν•˜λ©΄ 관리가 μ–΄λ ΅κ³  μ €μž₯ 곡간도 λ‚­λΉ„λ˜λ©°, 데이터 μˆ˜μ • μ‹œ 일관성을 μœ μ§€ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 고객의 μ£Όμ†Œ 정보가 μ—¬λŸ¬ ν…Œμ΄λΈ”μ— μ€‘λ³΅λ˜μ–΄ 있으면, μ£Όμ†Œ λ³€κ²½ μ‹œ λͺ¨λ“  ν…Œμ΄λΈ”μ„ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ •κ·œν™”λ₯Ό 톡해 데이터λ₯Ό 적절히 λΆ„λ¦¬ν•˜μ—¬ 쀑볡을 μ΅œμ†Œν™”ν•˜λ©΄, μ΄λŸ¬ν•œ 문제λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ •κ·œν™”λ₯Ό 톡해 ν…Œμ΄λΈ”μ„ λΆ„λ¦¬ν•˜κ³  관계λ₯Ό μ„€μ •ν•¨μœΌλ‘œμ¨, μ€‘λ³΅λ˜λŠ” 데이터λ₯Ό μ—†μ• κ³  μ €μž₯ 곡간을 μ ˆμ•½ν•©λ‹ˆλ‹€.

2️⃣ 데이터 무결성 μœ μ§€ 및 이상 ν˜„μƒ 방지 πŸ”

  • λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 무결성(Integrity)μ΄λž€ λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 일관성을 μ˜λ―Έν•©λ‹ˆλ‹€. μ •κ·œν™”λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚½μž… 이상, κ°±μ‹  이상, μ‚­μ œ 이상과 같은 이상 ν˜„μƒ(Anomaly)을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ‚½μž… 이상: 데이터 μ‚½μž… μ‹œ λΆˆν•„μš”ν•œ 정보가 ν•„μš”ν•˜κ²Œ λ˜λŠ” μƒν™©μž…λ‹ˆλ‹€. μ •κ·œν™”κ°€ λ˜μ§€ μ•ŠμœΌλ©΄ νŠΉμ • 데이터λ₯Ό μ‚½μž…ν•  λ•Œ μ—°κ΄€λ˜μ§€ μ•Šμ€ 데이터도 λ™μ‹œμ— μž…λ ₯ν•΄μ•Ό ν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.
    • κ°±μ‹  이상: 데이터λ₯Ό μˆ˜μ •ν•  λ•Œ, μ—¬λŸ¬ 곳에 λ™μΌν•œ 데이터가 μ€‘λ³΅λ˜μ–΄ 있으면 λͺ¨λ“  κ³³μ—μ„œ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 이λ₯Ό μˆ˜μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 일관성 μ—†λŠ” 데이터가 남을 수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ‚­μ œ 이상: νŠΉμ • 데이터λ₯Ό μ‚­μ œν•  λ•Œ λ‹€λ₯Έ κ΄€λ ¨ μ •λ³΄κΉŒμ§€ 같이 μ‚­μ œλ˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ • μ£Όλ¬Έ 정보λ₯Ό μ‚­μ œν•  λ•Œ 고객 μ •λ³΄κΉŒμ§€ μ‚­μ œλ˜λŠ” λ¬Έμ œκ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ 논리적이고 직관적인 ν…Œμ΄λΈ” ꡬ성 πŸ“Š

  • μ •κ·œν™”λ₯Ό 톡해 ν…Œμ΄λΈ”μ„ λΆ„λ¦¬ν•˜κ³  관계λ₯Ό μ„€μ •ν•¨μœΌλ‘œμ¨ ν…Œμ΄λΈ” ꡬ성이 λ”μš± 논리적이고 μ§κ΄€μ μœΌλ‘œ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€. 각 ν…Œμ΄λΈ”μ€ κ³ μœ ν•œ 역할을 가지고, μ€‘λ³΅λœ 정보 없이 효율적으둜 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, 고객 μ •λ³΄λŠ” 고객 ν…Œμ΄λΈ”μ—, μ£Όλ¬Έ μ •λ³΄λŠ” μ£Όλ¬Έ ν…Œμ΄λΈ”μ— 각각 μ €μž₯ν•˜μ—¬ ν…Œμ΄λΈ” ꡬ쑰가 λͺ…ν™•ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.

4️⃣ λ°μ΄ν„°λ² μ΄μŠ€ ν™•μž₯μ„± ν–₯상 πŸ“ˆ

  • μ •κ·œν™”λ₯Ό 톡해 ν…Œμ΄λΈ”μ΄ λ…λ¦½μ μœΌλ‘œ μ„€κ³„λ˜κΈ° λ•Œλ¬Έμ—, μƒˆλ‘œμš΄ 데이터λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ κΈ°μ‘΄ ν…Œμ΄λΈ”μ„ ν™•μž₯ν•  λ•Œ 영ν–₯을 μ΅œμ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, 고객 ν…Œμ΄λΈ”κ³Ό μ£Όλ¬Έ ν…Œμ΄λΈ”μ΄ λΆ„λ¦¬λ˜μ–΄ μžˆμ„ 경우, μ£Όλ¬Έ ν…Œμ΄λΈ”μ— μƒˆλ‘œμš΄ μ£Όλ¬Έ μœ ν˜•μ΄λ‚˜ 상세 정보λ₯Ό μΆ”κ°€ν•˜λŠ” 것이 고객 ν…Œμ΄λΈ”μ—λŠ” 영ν–₯을 주지 μ•ŠμœΌλ―€λ‘œ ν™•μž₯성이 λ†’μ•„μ§‘λ‹ˆλ‹€.

1️⃣ 제1μ •κ·œν˜• (1NF) - μ›μžμ„± 보μž₯ 🧩

쑰건: 각 μ»¬λŸΌμ€ ν•˜λ‚˜μ˜ κ°’(μ›μžκ°’)λ§Œμ„ κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€. 즉, ν…Œμ΄λΈ” λ‚΄ λͺ¨λ“  셀은 더 이상 λ‚˜λˆŒ 수 μ—†λŠ” μ›μž 값을 κ°€μ Έμ•Ό ν•˜λ©°, λ°˜λ³΅λ˜λŠ” 그룹이 μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€.

1NF 적용 μ „ν›„ μ˜ˆμ‹œ:

λΉ„μ •κ·œν™”λœ λ°μ΄ν„°μ—μ„œλŠ” 셀이 ν•˜λ‚˜μ˜ 값을 κ°€μ§ˆ 수 μžˆμ§€λ§Œ, μ€‘λ³΅λœ 컬럼이 μžˆμ„ 경우 이λ₯Ό 뢄리해야 ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ•„λž˜ μ˜ˆμ‹œλŠ” μ€‘λ³΅λœ 컬럼이 μ—†μ–΄ 1NF 쑰건을 μΆ©μ‘±ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ£Όλ¬Έλ²ˆν˜Έκ³ κ°μ΄λ¦„κ³ κ°μ£Όμ†Œμƒν’ˆλͺ…μƒν’ˆκ°€κ²©μˆ˜λŸ‰
1001ν™κΈΈλ™μ„œμšΈ 강남ꡬ 123슀마트폰500,0001
1002이λͺ½λ£‘μ„œμšΈ 강동ꡬ 456λ…ΈνŠΈλΆ1,200,0001
1003ν™κΈΈλ™μ„œμšΈ 강남ꡬ 123νƒœλΈ”λ¦Ώ300,0002

이 ν…Œμ΄λΈ”μ€ 1NFκ°€ 적용된 μƒνƒœλ‘œ, λͺ¨λ“  셀이 μ›μž 값을 가지고 μžˆμ–΄ λ°μ΄ν„°μ˜ μ›μžμ„±μ΄ 보μž₯λ©λ‹ˆλ‹€. 🎯

1NF 쑰건 μš”μ•½:

  • 각 도메인은 μ›μžκ°’μœΌλ‘œλ§Œ κ΅¬μ„±λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • λ°˜λ³΅λ˜λŠ” 그룹이 λ‚˜νƒ€λ‚˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έν‚€λ₯Ό 톡해 각 데이터 집합을 κ³ μœ ν•˜κ²Œ 식별할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ •λ¦¬ν•˜μžλ©΄, 제1μ •κ·œν˜•μ€ λͺ¨λ“  셀이 μ›μž 값을 κ°€μ Έμ•Ό ν•œλ‹€λŠ” κ·œμΉ™μ„ 톡해 λ°μ΄ν„°μ˜ 일관성과 정확성을 보μž₯ν•˜λŠ” 첫 번째 λ‹¨κ³„μž…λ‹ˆλ‹€! πŸš€


2️⃣ 제2μ •κ·œν˜• (2NF) - λΆ€λΆ„ ν•¨μˆ˜ 쒅속성 제거

쑰건: κΈ°λ³Έ ν‚€μ˜ μΌλΆ€μ—λ§Œ μ’…μ†λœ 속성을 μ œκ±°ν•˜κ³ , 각 속성은 κΈ°λ³Έ 킀에 μ™„μ „ μ’…μ†λ˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이 ν…Œμ΄λΈ”μ—μ„œ κΈ°λ³Έ ν‚€κ°€ '주문번호'라고 κ°€μ •ν•˜λ©΄, 고객이름, κ³ κ°μ£Όμ†ŒλŠ” μ£Όλ¬Έκ³Ό 관계없이 고객의 κ³ μœ ν•œ μ •λ³΄μž…λ‹ˆλ‹€. λ”°λΌμ„œ 고객 정보λ₯Ό λ”°λ‘œ λΆ„λ¦¬ν•˜μ—¬ 고객 ν…Œμ΄λΈ”μ„ λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€. πŸ™Œ

즉, κΈ°λ³Έν‚€μ˜ 뢀뢄집합이 κ²°μ •μžκ°€ λ˜μ–΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. 즉, 제2μ •κ·œν˜• μ „μ˜ ν…Œμ΄λΈ”μ—μ„œ 기본킀에 속해 μžˆμ„μ§€λ„ λͺ¨λ₯΄λŠ” 고객이름에 따라 κ³ κ°μ£Όμ†Œκ°€ κ²°μ •λ˜μ–΄ κ²°μ •μžκ°€ λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 이λ₯Ό λ³„λ„λ‘œ 관리해야 ν•©λ‹ˆλ‹€.

πŸ’» 2NF 적용 ν›„:

1. 고객 ν…Œμ΄λΈ” πŸ‘₯

고객IDκ³ κ°μ΄λ¦„κ³ κ°μ£Όμ†Œ
C001ν™κΈΈλ™μ„œμšΈ 강남ꡬ 123
C002이λͺ½λ£‘μ„œμšΈ 강동ꡬ 456

2. μ£Όλ¬Έ ν…Œμ΄λΈ” πŸ“¦

주문번호고객IDμƒν’ˆλͺ…μƒν’ˆκ°€κ²©μˆ˜λŸ‰
1001C001슀마트폰500,0001
1002C002λ…ΈνŠΈλΆ1,200,0001
1003C001νƒœλΈ”λ¦Ώ300,0002

이제 고객이름과 κ³ κ°μ£Όμ†Œκ°€ 더 이상 μ£Όλ¬Έ ν…Œμ΄λΈ”μ— 쀑볡 μ €μž₯λ˜μ§€ μ•Šκ³ , 고객ID둜 μ°Έμ‘°ν•˜μ—¬ κ΄€λ¦¬λ©λ‹ˆλ‹€ 😊


3️⃣ 제3μ •κ·œν˜• (3NF) - 이행적 쒅속성 제거

쑰건: κΈ°λ³Έ ν‚€κ°€ μ•„λ‹Œ 속성 κ°„ 쒅속성이 μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€. 즉, κΈ°λ³Έ ν‚€κ°€ μ•„λ‹Œ 컬럼이 λ‹€λ₯Έ λΉ„κΈ°λ³Έ ν‚€ μ»¬λŸΌμ— μ’…μ†λ˜μ–΄ 있으면 μ•ˆ λ©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ μƒν’ˆλͺ…κ³Ό μƒν’ˆκ°€κ²©μ€ μ„œλ‘œ 쒅속 관계에 μžˆμ–΄μš”. 즉, μƒν’ˆμ΄ 정해지면 가격도 μžλ™μœΌλ‘œ κ²°μ •λ˜μ£ . λ”°λΌμ„œ μƒν’ˆ 정보λ₯Ό λ”°λ‘œ λΆ„λ¦¬ν•˜μ—¬ μƒν’ˆ ν…Œμ΄λΈ”λ‘œ 관리해야 ν•©λ‹ˆλ‹€. πŸ€

제2 μ •κ·œν™”λ₯Ό μ μš©ν•œ ν…Œμ΄λΈ”μ—μ„œ A->B, B->Cκ°€ 성립할 λ•Œ, A->Cκ°€ μ„±λ¦½ν•˜λŠ” 것을 이행적 쒅속이라고 ν•˜λŠ”λ° μ–΄λ–€ 주문이 μ–΄λ–€ μƒν’ˆκ³Ό μ–΄λ–€ 고객이 μƒ€λŠ”μ§€λ₯Ό μ’…μ†μ„±μœΌλ‘œ 가지고 μžˆλŠ”λ° μ—¬κΈ°μ„œ μƒν’ˆλͺ…κ³Ό μƒν’ˆκ°€κ²©μ΄ 쒅속관계에 μžˆμœΌλ―€λ‘œ 이λ₯Ό 뢄리해야 ν•©λ‹ˆλ‹€.

πŸ’» 3NF 적용 ν›„:

1. 고객 ν…Œμ΄λΈ” πŸ‘₯

고객IDκ³ κ°μ΄λ¦„κ³ κ°μ£Όμ†Œ
C001ν™κΈΈλ™μ„œμšΈ 강남ꡬ 123
C002이λͺ½λ£‘μ„œμšΈ 강동ꡬ 456

2. μƒν’ˆ ν…Œμ΄λΈ” πŸ›’

μƒν’ˆIDμƒν’ˆλͺ…μƒν’ˆκ°€κ²©
P001슀마트폰500,000
P002λ…ΈνŠΈλΆ1,200,000
P003νƒœλΈ”λ¦Ώ300,000

3. μ£Όλ¬Έ ν…Œμ΄λΈ” πŸ“¦

주문번호고객IDμƒν’ˆIDμˆ˜λŸ‰
1001C001P0011
1002C002P0021
1003C001P0032

이제 μƒν’ˆλͺ…κ³Ό μƒν’ˆκ°€κ²©μ€ μƒν’ˆ ν…Œμ΄λΈ”μ—μ„œ κ΄€λ¦¬λ˜κ³ , μ£Όλ¬Έ ν…Œμ΄λΈ”μ€ μƒν’ˆIDλ₯Ό μ°Έμ‘°ν•˜κ²Œ λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨ 이행적 쒅속성이 μ œκ±°λ˜μ—ˆμ–΄μš” 🎯


4️⃣ BCNF (Boyce-Codd Normal Form)

쑰건: λͺ¨λ“  κ²°μ •μžκ°€ 후보 ν‚€μ—¬μ•Ό ν•©λ‹ˆλ‹€. 제3μ •κ·œν˜•μ—μ„œλŠ” 이행적 쒅속성을 μ œκ±°ν–ˆμ§€λ§Œ, BCNFλŠ” 후보 ν‚€μ˜ μ œμ•½μ„ 더 κ°•ν™”ν•©λ‹ˆλ‹€. 즉, 제 3μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, λ§Œμ•½ ν•œ μ£Όλ¬Έμ—μ„œ ν•œ 고객이 νŠΉμ • μ˜μ—… 사원을 λ‹΄λ‹Ήν•œλ‹€κ³  κ°€μ •ν•  경우, μ£Όλ¬Έλ²ˆν˜Έμ™€ 고객ID 외에도 μ˜μ—… 사원 IDκ°€ ν•¨κ»˜ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 고객IDκ°€ μ˜μ—… 사원을 κ²°μ •ν•˜λŠ” λΉ„μ •κ·œμ  관계가 μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

BCNF 적용 ν›„:

1. 고객 ν…Œμ΄λΈ” πŸ‘₯

고객IDκ³ κ°μ΄λ¦„κ³ κ°μ£Όμ†Œ
C001ν™κΈΈλ™μ„œμšΈ 강남ꡬ 123
C002이λͺ½λ£‘μ„œμšΈ 강동ꡬ 456

2. μƒν’ˆ ν…Œμ΄λΈ” πŸ›’

μƒν’ˆIDμƒν’ˆλͺ…μƒν’ˆκ°€κ²©
P001슀마트폰500,000
P002λ…ΈνŠΈλΆ1,200,000
P003νƒœλΈ”λ¦Ώ300,000

3. μ£Όλ¬Έ ν…Œμ΄λΈ” πŸ“¦

주문번호고객IDμƒν’ˆIDμˆ˜λŸ‰
1001C001P0011
1002C002P0021
1003C001P0032

4. μ˜μ—…μ‚¬μ› ν…Œμ΄λΈ” πŸ‘”

고객IDμ˜μ—…μ‚¬μ›ID
C001S001
C002S002

μ—¬κΈ°μ„œλŠ” 고객IDκ°€ μ˜μ—…μ‚¬μ›μ„ κ²°μ •ν•˜λŠ” λΉ„μ •κ·œμ μΈ 관계λ₯Ό μ œκ±°ν•˜μ—¬, 고객과 μ˜μ—…μ‚¬μ›μ˜ 정보λ₯Ό λ³„λ„λ‘œ κ΄€λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€ πŸŽ‰


μ•„λž˜λŠ” μ •κ·œν™”μ˜ λ‹¨μ λ§Œμ„ Velog에 올리기 μ ν•©ν•˜κ²Œ μ •λ¦¬ν•˜κ³  κΎΈλ―Ό λ‚΄μš©μž…λ‹ˆλ‹€. 이λͺ¨μ§€μ™€ μ†Œμ œλͺ©μœΌλ‘œ μ‹œκ°μ  효과λ₯Ό λ”ν–ˆμŠ΅λ‹ˆλ‹€.


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

λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ—μ„œ μ •κ·œν™”λŠ” λ§Žμ€ μž₯점을 μ œκ³΅ν•˜μ§€λ§Œ, λͺ¨λ“  μƒν™©μ—μ„œ μ™„λ²½ν•œ 해법이 λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. μ •κ·œν™”λ₯Ό κ³Όλ„ν•˜κ²Œ μ μš©ν•  경우 λ°œμƒν•  수 μžˆλŠ” λͺ‡ 가지 단점을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. λ³΅μž‘ν•œ 쿼리 ꡬ쑰 πŸ”„

μ •κ·œν™”λ₯Ό 톡해 ν…Œμ΄λΈ”μ΄ 많이 λΆ„λ¦¬λ˜λ©΄, 데이터λ₯Ό μ‘°νšŒν•  λ•Œ μ—¬λŸ¬ ν…Œμ΄λΈ”μ„ JOINν•΄μ•Ό ν•©λ‹ˆλ‹€. 이둜 인해 쿼리 ꡬ쑰가 λ³΅μž‘ν•΄μ§€κ³ , μž‘μ„± 및 μœ μ§€ 관리가 μ–΄λ €μ›Œμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

2. μ„±λŠ₯ μ €ν•˜ κ°€λŠ₯μ„± πŸ“‰

JOIN 연산이 자주 μ‚¬μš©λ˜λŠ” 경우 데이터 쑰회 μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€. 특히 λŒ€μš©λŸ‰ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ •κ·œν™”λœ ν…Œμ΄λΈ”μ€ λ‹€μˆ˜μ˜ ν…Œμ΄λΈ”μ„ 합쳐야 ν•˜λ―€λ‘œ, μ„±λŠ₯에 뢀정적인 영ν–₯을 λ―ΈμΉ  수 μžˆμŠ΅λ‹ˆλ‹€.

3. 데이터 μ‚½μž… 및 μ—…λ°μ΄νŠΈ μ„±λŠ₯ μ €ν•˜ 🐒

μ •κ·œν™”λœ ν…Œμ΄λΈ”μ€ 데이터λ₯Ό μ‚½μž…ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•  λ•Œ μ—¬λŸ¬ ν…Œμ΄λΈ”μ— μž‘μ—…μ„ ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 μ‚½μž…/μˆ˜μ • μž‘μ—…μ΄ λ³΅μž‘ν•΄μ§€κ³  μ„±λŠ₯이 λ–¨μ–΄μ§ˆ κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

4. κ³Όλ„ν•œ μ •κ·œν™”λ‘œ μΈν•œ λ³΅μž‘μ„± 증가 🧩

λ„ˆλ¬΄ λ§Žμ€ ν…Œμ΄λΈ”μ„ λΆ„λ¦¬ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰가 μ§€λ‚˜μΉ˜κ²Œ λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€. κ°œλ°œμžκ°€ ν…Œμ΄λΈ” ꡬ쑰λ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ ΅κ±°λ‚˜, μœ μ§€λ³΄μˆ˜κ°€ λΆˆνŽΈν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

5. μ“°κΈ° μ„±λŠ₯ μ €ν•˜ ✍️

μ •κ·œν™”λŠ” 읽기 μž‘μ—…μ—μ„œλŠ” μœ λ¦¬ν•˜μ§€λ§Œ, μ“°κΈ° μž‘μ—…μ΄ λΉˆλ²ˆν•œ μ‹œμŠ€ν…œμ—μ„œλŠ” λΆˆλ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ ν…Œμ΄λΈ”μ— 데이터λ₯Ό λ‚˜λˆ„μ–΄ μ €μž₯ν•˜λŠ” κ³Όμ •μ—μ„œ μ“°κΈ° μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μ •κ·œν™”λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 μœ μ§€ν•˜κ³  쀑볡을 쀄이기 μœ„ν•œ ν•„μˆ˜μ μΈ κ³Όμ •μ΄μ§€λ§Œ, λ•Œλ‘œλŠ” μ„±λŠ₯κ³Ό νš¨μœ¨μ„±μ„ μœ„ν•΄ λΉ„μ •κ·œν™”λ₯Ό μ μš©ν•˜μ—¬ 적절히 κ· ν˜•μ„ λ§žμΆ”λŠ” 것이 ν•„μš”ν•©λ‹ˆλ‹€. 각 상황에 λ§žλŠ” 졜적의 방법을 μ„ νƒν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€! πŸ’‘


μ•„λž˜λŠ” μ—­μ •κ·œν™”μ— λŒ€ν•΄ Velog에 μ—…λ‘œλ“œν•˜κΈ° μ ν•©ν•˜κ²Œ μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. μ‹œκ°μ  효과λ₯Ό μœ„ν•΄ 이λͺ¨μ§€μ™€ μ†Œμ œλͺ©μ„ μ‚¬μš©ν•΄ κΎΈλ©°λ³΄μ•˜μŠ΅λ‹ˆλ‹€.


μ—­μ •κ·œν™”μ˜ ν•„μš”μ„±κ³Ό 이유 🌐

λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ—μ„œ μ •κ·œν™”(Normalization)λŠ” ν•„μˆ˜μ μ΄μ§€λ§Œ, λ•Œλ‘œλŠ” μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ μ—­μ •κ·œν™”(Denormalization)λ₯Ό μ μš©ν•΄μ•Ό ν•  λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—­μ •κ·œν™”λŠ” 데이터 쀑볡을 ν—ˆμš©ν•˜κ±°λ‚˜ ν…Œμ΄λΈ” 결합을 톡해 μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” μ—­μ •κ·œν™”λ₯Ό μ μš©ν•˜λŠ” μ΄μœ μ™€ κ·Έ ν•„μš”μ„±μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


1. 읽기 μ„±λŠ₯ μ΅œμ ν™” πŸš€

μ •κ·œν™”λœ ν…Œμ΄λΈ”μ—μ„œλŠ” 데이터λ₯Ό μ‘°νšŒν•  λ•Œ JOIN 연산이 자주 λ°œμƒν•˜μ—¬ μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ—­μ •κ·œν™”λ₯Ό 톡해 데이터λ₯Ό 쀑볡 μ €μž₯ν•˜κ±°λ‚˜ κ²°ν•©ν•˜λ©΄, JOIN 연산을 쀄여 쑰회 속도λ₯Ό 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 특히 읽기 μž‘μ—…μ΄ λΉˆλ²ˆν•œ μ‹œμŠ€ν…œμ—μ„œ 큰 효과λ₯Ό λ΄…λ‹ˆλ‹€.

2. λ³΅μž‘ν•œ 쿼리 ꡬ쑰 κ°„μ†Œν™” πŸ”„

μ •κ·œν™”κ°€ μ‹¬ν™”λ μˆ˜λ‘ 쿼리 ꡬ쑰가 λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ ν…Œμ΄λΈ”μ„ JOINν•΄μ•Ό ν•˜λŠ” μƒν™©μ—μ„œ, μ—­μ •κ·œν™”λ₯Ό 톡해 데이터λ₯Ό κ²°ν•©ν•˜κ±°λ‚˜ 쀑볡 μ €μž₯ν•˜λ©΄ 쿼리 ꡬ쑰λ₯Ό λ‹¨μˆœν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 쿼리 μž‘μ„±κ³Ό μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

3. 데이터 일관성보닀 μ„±λŠ₯이 μ€‘μš”ν•œ 경우 ⏱️

μ‹€μ‹œκ°„ μ„±λŠ₯이 μ€‘μš”ν•œ μ‹œμŠ€ν…œμ—μ„œλŠ” 데이터 일관성보닀 응닡 속도가 더 μ€‘μš”ν•œ κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. 이럴 λ•ŒλŠ” μ—­μ •κ·œν™”λ₯Ό μ μš©ν•΄ μ„±λŠ₯을 높일 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λŒ€κ·œλͺ¨ μ›Ήμ‚¬μ΄νŠΈλ‚˜ μ‹€μ‹œκ°„ 검색 μ—”μ§„μ—μ„œλŠ” μ„±λŠ₯이 ν•΅μ‹¬μ΄λ―€λ‘œ, μ•½κ°„μ˜ 데이터 쀑볡을 κ°μˆ˜ν•˜κ³ μ„œλΌλ„ λΉ λ₯Έ 응닡 속도λ₯Ό μœ μ§€ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

4. 읽기 쀑심 μ‹œμŠ€ν…œμ—μ„œμ˜ μ΅œμ ν™” πŸ“Š

읽기 μž‘μ—…μ΄ μ“°κΈ° μž‘μ—…λ³΄λ‹€ 훨씬 λ§Žμ€ μ‹œμŠ€ν…œμ—μ„œλŠ” 데이터λ₯Ό μ—¬λŸ¬ 번 μ½λŠ” 것이 λΉ„νš¨μœ¨μ μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. μ—­μ •κ·œν™”λ₯Ό 톡해 데이터λ₯Ό ν•œ 곳에 λͺ¨μ•„두면 읽기 μž‘μ—…μ΄ μ΅œμ ν™”λ˜κ³ , 데이터 μ ‘κ·Ό 속도가 λΉ¨λΌμ§‘λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ¦¬ν¬νŒ… μ‹œμŠ€ν…œμ΄λ‚˜ 데이터 뢄석 μ‹œμŠ€ν…œμ—μ„œλŠ” μ—­μ •κ·œν™”κ°€ μœ λ¦¬ν•©λ‹ˆλ‹€.

5. μ €μž₯ 곡간이 넉넉할 λ•Œ πŸ’Ύ

μ—­μ •κ·œν™”λŠ” 데이터λ₯Ό 쀑볡 μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— μ €μž₯ 곡간을 더 많이 μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν˜„λŒ€μ˜ μ‹œμŠ€ν…œμ—μ„œλŠ” μ €μž₯ 곡간 λΉ„μš©μ΄ μ €λ ΄ν•΄μ‘ŒκΈ° λ•Œλ¬Έμ—, μ„±λŠ₯ ν–₯상을 μœ„ν•΄ 좔가적인 μ €μž₯ 곡간을 μ‚¬μš©ν•˜λŠ” 것이 μΆ©λΆ„νžˆ κ°€λŠ₯ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.


μ—­μ •κ·œν™”μ˜ 주의점 ⚠️

  • 데이터 일관성 문제: μ€‘λ³΅λœ 데이터λ₯Ό μˆ˜μ •ν•  λ•Œ, μ—¬λŸ¬ ν…Œμ΄λΈ”μ—μ„œ λ™μΌν•œ 데이터λ₯Ό λͺ¨λ‘ μˆ˜μ •ν•΄μ•Ό ν•˜λ―€λ‘œ 일관성을 μœ μ§€ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
  • μ“°κΈ° μ„±λŠ₯ μ €ν•˜: 데이터 μ€‘λ³΅μœΌλ‘œ 인해 μ‚½μž… 및 μˆ˜μ • μž‘μ—…μ΄ λ§Žμ•„μ§ˆ 수 있으며, 이둜 인해 μ“°κΈ° μ„±λŠ₯이 λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μœ μ§€λ³΄μˆ˜ λ³΅μž‘μ„± 증가: 데이터 쀑볡과 κ²°ν•©μœΌλ‘œ 인해 λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰가 λ³΅μž‘ν•΄μ§€λ―€λ‘œ, μœ μ§€λ³΄μˆ˜ μ‹œ 더 λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

0개의 λŒ“κΈ€