์ ๊ทํ(Normal Form, NF)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ์ ์ค๋ณต์ ์ค์ด๊ณ ,
์ด์ ํ์(Anomaly)์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ตฌ์กฐ๋ฅผ ๋จ๊ณ๋ณ๋ก ์ ์ํ ์ฌ๋ฐ๋ฅธ ํ ์ด๋ธ์ ํํ๋ฅผ ๋งํด์! เผผ ใค โ_โ เผฝใค
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ชป ์ค๊ณํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์์ , ์ญ์ ํ ๋ ๋ ผ๋ฆฌ์ ์ค๋ฅ(์ด์ ํ์)๊ฐ ๋ฐ์ํ ์ ์๊ฑฐ๋ ์.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ฌด์กฐ๊ฑด ์ชผ๊ฐ๋ ๊ฒ ์๋๋ผ,
์ ํด์ง ๊ท์น์ ๋ฐ๋ผ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฌ์ด๊ฐ๋ ๊ณผ์ ์ ์ ๊ทํ(Normalization)๋ผ๊ณ ํ๊ณ ,
๊ทธ ๊ท์น์ ๋ง์กฑํ ๊ฐ๊ฐ์ ๋จ๊ณ๋ฅผ ์ ๊ทํ์ด๋ผ๊ณ ๋ถ๋ฌ์.
SQLD ์ํ์์๋ ๋ณดํต 1์ ๊ทํ๋ถํฐ 3์ ๊ทํ, ๊ทธ๋ฆฌ๊ณ BCNF๊น์ง๊ฐ ์์ฃผ ์ถ์ ๋๋๋ฐ,
ํต์ฌ ๊ฐ๋ ์ ์์ฃผ ์ฝ๊ฒ ์์ฝํด ๋๋ฆด๊ฒ์!
1. ์ 1์ ๊ทํ (1NF)
- ์กฐ๊ฑด: ํ ์ด๋ธ์ ๋ชจ๋ ๋๋ฉ์ธ์ด ์์๊ฐ(Atomic Value)๋ง์ผ๋ก ๋์ด ์์ด์ผ ํฉ๋๋ค.
- ์ฝ๊ฒ ๋งํด: ํ๋์ ์นธ(์ )์๋ ๋ฌด์กฐ๊ฑด ๋ฐ์ดํฐ๊ฐ ๋ฑ ํ๋๋ง ๋ค์ด๊ฐ์ผ ํด์. ํ ์นธ์ ์ถ๊ตฌ, ๋๊ตฌ์ฒ๋ผ ์ฌ๋ฌ ๊ฐ๊ฐ ๋ค์ด๊ฐ๋ฉด ์ ๋ฉ๋๋ค.
2. ์ 2์ ๊ทํ (2NF)
- ์กฐ๊ฑด: ์ 1์ ๊ทํ์ ๋ง์กฑํ๊ณ , ์ฃผ์๋ณ์๊ฐ ๋ณตํฉํค(2๊ฐ ์ด์)์ผ ๋ ๋ถ๋ถ ํจ์ ์ข ์์ฑ์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
- ์ฝ๊ฒ ๋งํด: ๊ธฐ๋ณธํค๊ฐ [ํ๋ฒ + ๊ณผ๋ชฉ์ฝ๋]์ฒ๋ผ ์กฐํฉ๋์ด ์์ ๋, ์ฑ์ ์ ํ๋ฒ๊ณผ ๊ณผ๋ชฉ ๋ชจ๋๊ฐ ์์ด์ผ ๊ฒฐ์ ๋์ง๋ง, '๊ฐ์์ค'์ ๊ณผ๋ชฉ์ฝ๋์๋ง ์ข ์๋ ์ ์์์์? ์ด๋ ๊ฒ ๊ธฐ๋ณธํค์ ์ผ๋ถ๋ถ์๋ง ์ข ์๋๋ ์ปฌ๋ผ์ ๋ณ๋ ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํ๋ ๋จ๊ณ์์.
3. ์ 3์ ๊ทํ (3NF)
- ์กฐ๊ฑด: ์ 2์ ๊ทํ์ ๋ง์กฑํ๊ณ , ์ดํ์ ํจ์ ์ข ์์ฑ์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
- ์ฝ๊ฒ ๋งํด: $A \rightarrow B$์ด๊ณ $B \rightarrow C$์ผ ๋, $A \rightarrow C$๊ฐ ์ฑ๋ฆฝํ๋ ๊ด๊ณ๋ฅผ ๋์ด๋ด๋ ๊ฑฐ์์. ์๋ฅผ ๋ค์ด ํ๋ฒ์ ์๋ฉด ํ๊ณผ๋ฅผ ์๊ณ , ํ๊ณผ๋ฅผ ์๋ฉด ํ๊ณผ์ฌ๋ฌด์ค ์์น๋ฅผ ์ ์ ์๋ค๋ฉด, ํ๊ณผ์ฌ๋ฌด์ค ์์น๋ ํ๊ณผ ํ ์ด๋ธ๋ก ๋ฐ๋ก ๋นผ์ผ ํฉ๋๋ค.
4. BCNF (Boyce-Codd ์ ๊ทํ)
- ์กฐ๊ฑด: ์ 3์ ๊ทํ์ ๋ง์กฑํ๊ณ , ๋ชจ๋ ๊ฒฐ์ ์๊ฐ ํ๋ณดํค์ฌ์ผ ํฉ๋๋ค.
- ์ฝ๊ฒ ๋งํด: ์๋ณ์๊ฐ ์๋ ์ผ๋ฐ ์ปฌ๋ผ์ด ๋ค๋ฅธ ์ปฌ๋ผ์ ๊ฒฐ์ ํ๊ณ ์๋ค๋ฉด ํ ์ด๋ธ์ ๋ถ๋ฆฌํด์ผ ํด์.
๐ก ์ํ์ฉ ๊ฟํ!
์ ๊ทํ๋ฅผ ์งํํ ์๋ก ํ ์ด๋ธ์ด ์๊ฒ ์ชผ๊ฐ์ง๊ธฐ ๋๋ฌธ์
๋ฐ์ดํฐ ์กฐ์ธ(Join)์ด ๋ง์์ ธ์ ์กฐํ ์ฑ๋ฅ์ ๋จ์ด์ง ์ ์์ง๋ง,
์ ๋ ฅ/์์ /์ญ์ ์์ ์ด์ ํ์์ ์ฌ๋ผ์ง๋๋ค.
์ด ํน์ง์ ๋น๊ตํ๋ ๋ฌธ์ ๊ฐ ๋จ๊ณจ๋ก ๋์ค๋ ๊ผญ ๊ธฐ์ตํด ๋์ธ์! ๐
์ 2์ ๊ทํ(2NF)๊ณผ ์ 3์ ๊ทํ(3NF)์ ๋ ๋ค ํ ์ด๋ธ์ ๋ถ๋ฆฌํ๋ ๊ณผ์ ์ด์ง๋ง, "๋ฌด์ ๋๋ฌธ์ ํ ์ด๋ธ์ ์ชผ๊ฐ๋๋"ํ๋ ์์ธ(์ข ์์ฑ ์ข ๋ฅ)์์ ๊ฒฐ์ ์ ์ธ ์ฐจ์ด๊ฐ ์์ด์! เผผ ใค โ_โ เผฝใค
๊ฐ์ฅ ํต์ฌ์ ์ธ ์ฐจ์ด๋ ๊ธฐ๋ณธํค(์๋ณ์)๊ฐ ๋ณตํฉํค(2๊ฐ ์ด์)๋, ์๋๋ฉด ์ผ๋ฐ ์ปฌ๋ผ๋ผ๋ฆฌ ์ข ์ ๊ด๊ณ๊ฐ ์๋๋์ ๋ฌธ์ ์ ๋๋ค. ใ ใ ํ
๐ก 2์ ๊ทํ vs 3์ ๊ทํ ํต์ฌ ์ฐจ์ด
| ๊ตฌ๋ถ | ์ 2์ ๊ทํ (2NF) | ์ 3์ ๊ทํ (3NF) |
| ์ ๊ฑฐ ๋์ | ๋ถ๋ถ ํจ์ ์ข ์ ์ ๊ฑฐ | ์ดํ์ ํจ์ ์ข ์ ์ ๊ฑฐ |
| ์ฝ๊ฒ ๋งํด | ๊ธฐ๋ณธํค๊ฐ **์ฌ๋ฌ ๊ฐ(๋ณตํฉํค)**์ผ ๋, ๊ธฐ๋ณธํค ์ค ์ผ๋ถ์๋ง ์ข ์๋๋ ์ปฌ๋ผ์ ๋ถ๋ฆฌํ๋ ๊ฒ | ๊ธฐ๋ณธํค๊ฐ ์๋ ์ผ๋ฐ ์ปฌ๋ผ๋ค๋ผ๋ฆฌ ์์ธ๊ณผ ๊ฒฐ๊ณผ ๊ด๊ณ๊ฐ ์๋ ์ปฌ๋ผ์ ๋ถ๋ฆฌํ๋ ๊ฒ |
| ํต์ฌ ํค์๋ | #๋ณตํฉ๊ธฐ๋ณธํค #์ผ๋ถ์ปฌ๋ผ์ข ์ | #์ฃผ์๋ณ์_์ธ_์ปฌ๋ผ #๊ผฌ๋ฆฌ๋ฌผ๊ธฐ_์ข ์ |
1. ์ 2์ ๊ทํ (2NF) ์์๋ก ์ดํดํ๊ธฐ
2์ ๊ทํ์ ๊ธฐ๋ณธํค๊ฐ [ํ๋ฒ + ๊ณผ๋ชฉ์ฝ๋]์ฒ๋ผ ๋ ๊ฐ ์ด์์ผ๋ก ๋ฌถ์ฌ ์์ ๋ ๋ฐ์ํด์.
- ๊ธฐ์กด ํ ์ด๋ธ: [ํ๋ฒ, ๊ณผ๋ชฉ์ฝ๋, ์ฑ์ , ๊ฐ์์ค]
- ๋ฌธ์ ์ : ์ฑ์ ์ ํ๋ฒ๊ณผ ๊ณผ๋ชฉ์ฝ๋๊ฐ ๋ ๋ค ์์ด์ผ ๊ฒฐ์ ๋์ง๋ง, ๊ฐ์์ค์ ๊ณผ๋ชฉ์ฝ๋๋ง ์๋ฉด ๋ฐ๋ก ์ ์ ์์ฃ ? ๊ธฐ๋ณธํค์ ์ผ๋ถ๋ถ(๊ณผ๋ชฉ์ฝ๋)์๋ง ์ข ์๋์ด ์๋ ์ํ(๋ถ๋ถ ํจ์ ์ข ์)์ ๋๋ค.
- ํด๊ฒฐ (2์ ๊ทํ): ๊ฐ์์ค ์ ๋ณด๋ฅผ ๋ณ๋ ํ
์ด๋ธ๋ก ์ชผ๊ฐญ๋๋ค.
- ํ ์ด๋ธ 1: [ํ๋ฒ, ๊ณผ๋ชฉ์ฝ๋, ์ฑ์ ]
- ํ ์ด๋ธ 2: [๊ณผ๋ชฉ์ฝ๋, ๊ฐ์์ค]
2. ์ 3์ ๊ทํ (3NF) ์์๋ก ์ดํดํ๊ธฐ
3์ ๊ทํ์ ๊ธฐ๋ณธํค๊ฐ ๋จ ํ ๊ฐ์ผ ๋๋ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ผ๋ฐ ์ปฌ๋ผ๋ค๋ผ๋ฆฌ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ ์ข ์๋๋ ํ์($A \rightarrow B \rightarrow C$)์ ํด๊ฒฐํฉ๋๋ค.
- ๊ธฐ์กด ํ ์ด๋ธ: [ํ๋ฒ, ํ๊ณผ, ํ๊ณผ์ฌ๋ฌด์ค ์์น]
- ๋ฌธ์ ์ : ๊ธฐ๋ณธํค๋ ํ๋ฒ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ํ๋ฒ์ ์๋ฉด ํ๊ณผ๋ฅผ ์ ์ ์๊ณ , ํ๊ณผ๋ฅผ ์๋ฉด ํ๊ณผ์ฌ๋ฌด์ค ์์น๋ฅผ ์ ์ ์์ฃ ? ์ฆ, ์ผ๋ฐ ์ปฌ๋ผ์ธ ํ๊ณผ๊ฐ ํ๊ณผ์ฌ๋ฌด์ค ์์น๋ฅผ ๊ฒฐ์ ํ๊ณ ์๋ ์ํ(์ดํ์ ํจ์ ์ข ์)์ ๋๋ค.
- ํด๊ฒฐ (3์ ๊ทํ): ๊ผฌ๋ฆฌ๋ฌผ๊ธฐ๋ฅผ ๋๊ธฐ ์ํด ํ๊ณผ ์ ๋ณด ํ
์ด๋ธ์ ๋ฐ๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- ํ ์ด๋ธ 1: [ํ๋ฒ, ํ๊ณผ]
- ํ ์ด๋ธ 2: [ํ๊ณผ, ํ๊ณผ์ฌ๋ฌด์ค ์์น]
๐ก SQLD ์ํ ๋ฌธ์ ํธ๋ ํ!
์ํ ๋ฌธ์ ์ง๋ฌธ์์ **"๋ณตํฉํค", "๊ธฐ๋ณธํค์ ์ผ๋ถ์ ์ข ์"**์ด๋ผ๋ ํํ์ด ๋์ค๋ฉด 2์ ๊ทํ์ ๋ ์ฌ๋ฆฌ์๊ณ , **"์ฃผ์๋ณ์๊ฐ ์๋ ์ผ๋ฐ ์์ฑ ๊ฐ์ ์ข ์", "์ดํ์ ํจ์ ์ข ์"**์ด๋ผ๋ ๋จ์ด๊ฐ ๋ณด์ด๋ฉด ๋ฌด์กฐ๊ฑด 3์ ๊ทํ์ ๊ณ ๋ฅด์๋ฉด ๋ฉ๋๋ค! ๐
'4. Backend & DB ๐๏ธ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SQLD] JOIN์ด๋? (0) | 2026.05.31 |
|---|---|
| [๋ฐ์ดํฐ ๋ถ์] Python, Pandas Library์ mode() ํจ์๋ฅผ ์ด์ฉํด์ ์ต๋น๊ฐ ๊ตฌํ๊ธฐ (0) | 2025.10.12 |
| โ 2025 ๋ง๋ฐ์ง SQLD ๊ณต๋ถ๋ฒ ์ด ์ ๋ฆฌ โ (1) | 2025.09.28 |
| ERgrin FK ์ฝ์ ๋ฒ (0) | 2025.05.27 |
| MySQL Shell ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ (0) | 2025.05.26 |