29_Oct_2021 🐰 μ—˜λ¦¬μŠ€ AI νŠΈλž™ TIL: μ •κ·œν™”(Normalization)와 View

μœ ν™˜μ΅Β·2021λ…„ 10μ›” 30일
0

Alexander Yoo의 Back-end Engineering

λͺ©λ‘ 보기
3/6

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

ν…Œμ΄λΈ” κ°„ 데이터 μ‘°μž‘(μ‚½μž…, μˆ˜μ •, μ‚­μ œ)μ‹œ λ°œμƒν•  수 μžˆλŠ” 이상 ν˜„μƒμ„ 쀄이기 μœ„ν•΄ ν•˜λŠ” μž‘μ—…μ΄λ‹€.

μ •κ·œν™” λ‹¨κ³„λ‘œλŠ” 1~5μ°¨ μ •κ·œν™”μ™€ BCNFκΉŒμ§€ λ‹€μ–‘ν•œ μ’…λ₯˜κ°€ μžˆμ§€λ§Œ, 1~3μ°¨ μ •κ·œν™”κΉŒμ§€ μ§„ν–‰ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ μ΄μƒν˜„μƒμ„ 없앨 수 μžˆλ‹€.

1μ°¨ μ •κ·œν™”(1NF)

각 μ†μ„±λ§ˆλ‹€ 값이 1κ°œμ”© μ‘΄μž¬ν•˜λ„λ‘ ν•˜λŠ” 과정이며, μ›μžν™”λΌκ³ λ„ ν•œλ‹€.
=> 각 속성 μ•ˆμ—λŠ” λ‹¨μΌμ˜ μ›μžν™”λœ λ°μ΄ν„°λ§Œμ„ λ„£λŠ” 것을 μ›μΉ™μœΌλ‘œ ν•œλ‹€.

2μ°¨ μ •κ·œν™”

λ³΅ν•©ν‚€λ‘œ ꡬ성 λ˜μ–΄μžˆμ„ λ•Œ κ³ λ €ν•΄μ•Ό ν•˜λ©°, λͺ¨λ“  속성이 μ™„μ „ ν•¨μˆ˜ 쒅속이 λ˜λ„λ‘ ν•˜λŠ” μž‘μ—…μ΄λ‹€.

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

예λ₯Ό λ“€μ–΄, A,B,C,D κ°€ μžˆμ„ λ•Œ Bκ°€ A에 μ˜ν•΄ μ’…μ†λ˜λŠ” 경우, BλŠ” λ‹€λ₯Έ λ‚΄μš©(C,D)에 μ˜ν•΄ 쒅속이 λ˜μ§€ μ•ŠλŠ” 경우λ₯Ό λ§ν•œλ‹€.

같은 λŒ€μƒμ˜ 데이터가 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” ν˜„μƒμ„ ν”Όν•˜κΈ° μœ„ν•΄, ν•΄λ‹Ή 데이터 κ΄€λ ¨ 속성을 λΆ„λ¦¬μ‹œμΌœ 쒅속성을 μ œκ±°ν•΄μ•Ό ν•œλ‹€.

ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ •ν•  경우, λΆ„λ¦¬ν•œ ν…Œμ΄λΈ”μ—μ„œ μˆ˜μ •μ΄ λ˜λ―€λ‘œ, 변경사항이 μ°Έμ‘°ν•˜λŠ” ν…Œμ΄λΈ”μ—λ„ μ μš©λ˜λŠ” 것을 확인할 수 μžˆλ‹€.

3μ°¨ μ •κ·œν™”

ν…Œμ΄λΈ” λ‚΄μ—μ„œ 이행적 μš”μ†Œλ₯Ό μ œκ±°ν•˜λŠ” μž‘μ—…μ΄λ‹€.

이행적인 μš”μ†Œ?

ex) 데이터λ₯Ό νŠΉμ • μ§“λŠ” idλŠ” λ™μΌν•˜μ§€λ§Œ κ΄€λ ¨ 데이터가 λ‹€λ₯Έ ν˜„μƒμ„ 예둜 λ“€ 수 μžˆλ‹€.

데이터 μ •λ³΄λŠ” λͺ¨λ‘ PK인 ID에 영ν–₯을 λ°›λŠ”λ‹€. λ”°λΌμ„œ 이λ₯Ό λΆ„λ¦¬μ‹œμΌœ 이행적 μš”μ†Œλ₯Ό μ œκ±°ν•΄μ•Ό ν•œλ‹€.

3μ°¨ μ •κ·œν™”λ₯Ό 거치고 데이터λ₯Ό μˆ˜μ •ν•˜λ©΄, 또 λ‹€μ‹œ λΆ„λ¦¬λœ ν•΄λ‹Ή λ°μ΄ν„°μ˜ 값이 μ •μƒμ μœΌλ‘œ μˆ˜μ •λ˜μ–΄ λ°˜μ˜λ˜λŠ” 것을 확인할 수 μžˆλ‹€.


Viewλž€?

ν•˜λ‚˜ μ΄μƒμ˜ ν…Œμ΄λΈ”μ—μ„œ μ—¬λŸ¬ μ •λ‘œλ₯Ό ν† λŒ€λ‘œ λ§Œλ“€μ–΄μ§€λŠ” κ°€μƒμ˜ ν…Œμ΄λΈ”μ„ λ§ν•œλ‹€.

기쑴의 데이터 ν…Œμ΄λΈ”μ—λŠ” λΆˆν•„μš”ν•œ 정보도 λ“€μ–΄μžˆμœΌλ―€λ‘œ, ν•„μš”ν•œ μ •λ³΄λ§Œ μΆ”μΆœν•˜μ—¬ κ°€μƒμ˜ ν…Œμ΄λΈ”(view)을 μƒμ„±ν•œλ‹€. -> λ³΄μ•ˆμ„±κ³Ό 속도λ₯Ό 높인닀.

CREATE VIEW 'ν…Œμ΄λΈ” λͺ…' AS
SELECT κ°€μ Έμ˜€λŠ” 속성 λͺ…, 속성 λͺ…2, ...
FROM κ°€μ Έμ˜¬ 속성이 μžˆλŠ” ν…Œμ΄λΈ”
(WHERE 절둜 쑰건을 μ‚¬μš©ν•  수 μžˆλ‹€)

μ—¬λŸ¬ ν…Œμ΄λΈ”μ—μ„œ View ν™œμš©

λ‹€μˆ˜μ˜ 인원이 데이터 관리λ₯Ό ν•˜κ²Œ 될 경우, 데이터 ν…Œμ΄λΈ”μ˜ κΆŒν•œμ„ ν™•μž₯ν•˜κ²Œ 되면 λΆˆν•„μš”ν•œ 정보λ₯Ό μ œκ³΅λ˜λ©΄μ„œ κ°œμΈμ •λ³΄ λ…ΈμΆœμ˜ μœ„ν—˜μ„±μ΄ μ¦κ°€ν•˜λŠ” λ“± λ¬Έμ œκ°€ μƒκΈ°κ²Œ λœλ‹€.

μ΄λ•Œ Viewλ₯Ό μƒμ„±ν•΄μ„œ 데이터λ₯Ό μ œκ³΅ν•˜λ©΄ ν•„μš”ν•œ μ •λ³΄λ§Œ 선택해 κ°€μƒμ˜ ν…Œμ΄λΈ” ν˜•νƒœλ‘œ μ œκ³΅ν•˜λ©΄, λΆˆν•„μš”ν•œ μ •λ³΄μ˜ 곡유λ₯Ό 막고 고객 정보λ₯Ό μ œμ™Έν•˜μ—¬ 제곡 ν•  수 μžˆλ‹€.

CREATE VIEW 'ν…Œμ΄λΈ” λͺ…' AS
SELECT κ°€μ Έμ˜€λŠ” 속성 λͺ…, 속성 λͺ…2, ...
FROM κ°€μ Έμ˜¬ 속성이 μžˆλŠ” ν…Œμ΄λΈ”, ν…Œμ΄λΈ”2...
(WHERE 절둜 쑰건을 μ‚¬μš©ν•  수 μžˆλ‹€)

View μ‚­μ œ

ViewλŠ” μ‹€μ œ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” κ°€μƒμ˜ ν…Œμ΄λΈ”μ΄κΈ°μ—, ν•΄λ‹Ή viewλ₯Ό μˆ˜μ •,μ‚­μ œν•˜λ”λΌλ„ 원본 ν…Œμ΄λΈ”μ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€.

DROP VIEW μ‚­μ œν•˜λŠ” View λͺ…
profile
μ‚¬μš©μžμ˜ 편의λ₯Ό 더 μƒκ°ν•˜κ³  νŽΈμ•ˆν•œ UI/UX κ°œλ°œμ„ κΏˆκΎΈλŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ§€λ§μƒμž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€