πŸ’Ύ SQL_

[SQLD] μ •κ·œν™”μ˜ κ°œλ…κ³Ό μ„€λͺ… 그리고 단계(제1,2,3 μ •κ·œν™”)

CodeLoge 2025. 2. 16. 19:39

#1 μ •κ·œν™”(Nomalization)

✴︎ μ •κ·œν™”λž€?

: λ°μ΄ν„°μ˜ 일관성, μ΅œμ†Œν•œμ˜ 데이터 쀑볡, μ΅œλŒ€ν•œμ˜ 데이터 μœ μ—°μ„±μ„ μœ„ν•œ 방법, 데이터λ₯Ό λΆ„ν•΄ν•˜λŠ” κ³Όμ •

: 데이터 쀑볡을 μ œκ±°ν•˜κ³  데이터 λͺ¨λΈμ˜ 독립성을 ν™•λ³΄ν•˜κΈ° μœ„ν•œ 방법

→ 쀑볡을 μ œκ±°ν•˜λ €λ©΄ λΆ„ν•΄λ₯Ό ν•  μˆ˜λ°–μ— μ—†μŒ.

: μˆ˜ν–‰ν•˜λ©΄ λΉ„μ¦ˆλ‹ˆμŠ€μ— λ³€ν™”κ°€ λ°œμƒν•˜μ—¬λ„ 데이터 λͺ¨λΈμ˜ 변경을 μ΅œμ†Œν™” ν•  수 있음

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

: 무결성, μ›μžμ„±μ„ κ°€μ§€κΈ° μœ„ν•΄ ν•˜λŠ” 기법 쀑 ν•˜λ‚˜

 

✴︎ ν•¨μˆ˜μ˜ 쒅속성(Functional Dependency)

: μ •κ·œν™”λŠ” ν•¨μˆ˜μ  쒅속성을 근거둜 함 → ν•¨μˆ˜μ  쒅속성 : X→Y이면 YλŠ” X에 ν•¨μˆ˜μ μœΌλ‘œ 쒅속

Ex) νšŒμ› IDκ°€ λ³€ν™”ν•˜λ©΄ 이름도 λ³€κ²½ → νšŒμ›IDκ°€ κΈ°λ³Έν‚€, νšŒμ›IDκ°€ 이름을 ν•¨μˆ˜μ μœΌλ‘œ 쒅속

 

✴︎ μ •κ·œν™”μ˜ κΈ°λ³Έ λͺ©ν‘œ

: ν…Œμ΄λΈ”κ°„μ— μ€‘λ³΅λœ 데이터 ν—ˆμš© X

: 무결성 μœ μ§€

: DB의 μ €μž₯μš©λŸ‰ 쀄이기

 

✴︎ μ •κ·œν™” 절차

μ •κ·œν™” 절차 μ„€λͺ…
제1μ •κ·œν™” 속성(Attribute)의 μ›μžμ„± 확보
κΈ°λ³Έν‚€(Primary Key) μ„€μ •
제2μ •κ·œν™” κΈ°λ³Έν‚€κ°€ 2개 μ΄μƒμ˜ μ†μ„±μœΌλ‘œ 이루어진 경우, λΆ€λΆ„ ν•¨μˆ˜ 쒅속성을 제거(λΆ„ν•΄)
제3μ •κ·œν™” κΈ°λ³Έν‚€λ₯Ό μ œμ™Έν•œ 칼럼 간에 쒅속성을 제거
이행 ν•¨μˆ˜ 쒅속성을 제거
BCNF κΈ°λ³Έν‚€λ₯Ό μ œμ™Έν•˜κ³  후보킀가 μžˆλŠ” 경우, 후보킀가 κΈ°λ³Έν‚€λ₯Ό μ’…μ†μ‹œν‚€λ©΄ λΆ„ν•΄
제4μ •κ·œν™” μ—¬λŸ¬ μΉΌλŸΌλ“€μ΄ ν•˜λ‚˜μ˜ μΉΌλŸΌμ„ μ’…μ†μ‹œν‚€λŠ” 경우 λΆ„ν•΄ → 닀쀑값 쒅속성을 제거
제5μ •κ·œν™” JOIN에 μ˜ν•΄μ„œ 쒅속성이 λ°œμƒλ˜λŠ” 경우 λΆ„ν•΄

: BCNF  μ œ3μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•˜κ³  λ‚œ λ‹€μŒμ— ν…Œμ΄λΈ”μ— λŒ€ν•΄ λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

 

✴︎ μ΄μƒν˜„μƒ(Anomaly)

: λΉ„μ •κ·œν™”λœ μƒνƒœμ—μ„œ 데이터 μ‘°μž‘ μ‹œ λ°œμƒν•  수 μžˆλŠ” 문제λ₯Ό 의미

μ’…λ₯˜ μ„€λͺ…
μ‚½μž… 이상 (Insertion Anomaly) 데이터λ₯Ό μ‚½μž…ν•  λ•Œ, νŠΉμ • 정보λ₯Ό μ‚½μž…ν•˜κΈ° μœ„ν•΄ λΆˆν•„μš”ν•œ λ°μ΄ν„°κΉŒμ§€ ν•¨κ»˜ μ‚½μž…ν•΄μ•Όν•˜λŠ” 문제
μ‚­μ œ 이상 (Deletion Anomaly) 데이터λ₯Ό μ‚­μ œν•  λ•Œ, μ˜λ„μΉ˜ μ•Šκ²Œ λ‹€λ₯Έ μ€‘μš”ν•œ λ°μ΄ν„°κΉŒμ§€ μ‚­μ œλ˜λŠ” 문제
κ°±μ‹  이상 (Update Anomaly) λ™μΌν•œ 데이터가 μ—¬λŸ¬ 곳에 μ€‘λ³΅λ˜μ–΄ μ €μž₯λ˜μ–΄ μžˆμ„ λ•Œ, 데이터λ₯Ό κ°±μ‹ ν•  λ•Œ λͺ¨λ“  μ€‘λ³΅λœ 데이터λ₯Ό λ™μ‹œμ— κ°±μ‹ ν•˜μ§€ μ•ŠμœΌλ©΄ 일관성이 κΉ¨μ§€λŠ” 문제

 

#2 제1~3μ •κ·œν™”

✴︎ μ œ1μ •κ·œν™”

: κΈ°λ³Έν‚€λ₯Ό μž‘λŠ” 것이 제1μ •κ·œν™”

: μ›μžμ„±μ„ κ°€μ§€λŠ” 것

 

✴︎ 제2μ •κ·œν™”

: λΆ€λΆ„ ν•¨μˆ˜ 쒅속성 → κΈ°λ³Έν‚€κ°€ 2개 μ΄μƒμ˜ 칼럼으둜 이루어진 κ²½μš°μ—λ§Œ λ°œμƒ ⇒ λΆ€λΆ„ν•¨μˆ˜ 쒅속성이 λ°œμƒν•˜λ©΄ λΆ„ν•΄λ₯Ό 해야함

: κΈ°λ³Έν‚€κ°€ ν•˜λ‚˜μ˜ 칼럼으둜 이루어지면 제2μ •κ·œν™”λŠ” μƒλž΅ν•¨

 

✴︎ μ œ3μ •κ·œν™”

: 이행 ν•¨μˆ˜ 쒅속성 → κΈ°λ³Έν‚€λ₯Ό μ œμ™Έν•˜κ³  컬럼 간에 쒅속성이 λ°œμƒν•˜λŠ” 것

: 제1μ •κ·œν™”, 제2μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•œ λ‹€μŒμ— 해야함