์ ๊ทํ
Normalization, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ๋ ๊ณผ์
๋ฐ์ดํฐ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ , ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ค์ํ๋ฉฐ ์ด์ ํ์์ ๋ฐฉ์งํ๋ค.
์ ๊ทํ์ ๋ค์๊ณผ ๊ฐ์ด ๋๋์ด์ ธ ์๋ค.
๊ฐ๋ | ๊ฒฐ๊ณผ | |
1NF (์ 1์ ๊ทํ) | ์ปฌ๋ผ์ ๊ฐ์ ์์๊ฐ(Atomic Value)๋ง ๊ฐ์ ธ์ผ ํจ | ๋ชจ๋ ์ปฌ๋ผ์ด *์์๊ฐ์ ๊ฐ์ง => ์ค๋ณต๋ ์ปฌ๋ผ ์ ๊ฑฐ => ๋ค์ค๊ฐ ์ ๊ฑฐ |
2NF(์ 2์ ๊ทํ) | ๋ถ๋ถ ํจ์ ์ข ์ ์ ๊ฑฐ | ๊ธฐ๋ณธํค์ ์ผ๋ถ๊ฐ ์๋ ์ ์ฒด์ ์ข
์๋ ๋น๊ธฐ๋ณธ ์์ฑ๋ง ์กด์ฌ => ๋ณตํฉํค์ผ ๋ ๋ฐ์ํ๋ ์ข ์์ฑ ์ ๊ฑฐ |
3NF(์ 3์ ๊ทํ) | ์ดํ์ ํจ์ ์ข ์ ์ ๊ฑฐ | ๋น๊ธฐ๋ณธ ์์ฑ์ด ๋ค๋ฅธ ๋น๊ธฐ๋ณธ ์์ฑ์ ์์กดํ์ง ์์ => ์์ฑ ๊ฐ ์ข ์์ฑ ์ ๊ฑฐ, ๊ฐฑ์ ์ด์ ๋ฐฉ์ง |
BCNF(๋ณด์ด์ค-์ฝ๋ ์ ๊ทํ) | ๊ฒฐ์ ์(Determinant)๊ฐ ํ๋ณดํค | ๋ชจ๋ ๊ฒฐ์ ์๊ฐ ํ๋ณดํค =>ํ๋ณดํค๊ฐ ์๋ ์์ฑ์ ์ํด ๊ฒฐ์ ๋๋ ๋ฌธ์ ์ ๊ฑฐ |
4NF(์ 4์ ๊ทํ) | ๋ค์น ์ข ์ ์ ๊ฑฐ | ํ๋์ ํค์ ์ฌ๋ฌ ๋
๋ฆฝ์ ์ธ ๋ค์น ์ข
์์ด ์กด์ฌํ์ง ์์ => ๋ฐ๋ณต๋๋ ๊ทธ๋ฃน์ ๊ฑฐ |
5NF(์ 5์ ๊ทํ) | ์กฐ์ธ ์ข ์์ฑ ์ ๊ฑฐ | ์กฐ์ธ์ ์ํ ์ ๋ณด ์์ค ์์ด ํ
์ด๋ธ ๋ถํด ๊ฐ๋ฅ => ๊ณผ๋ํ ํ ์ด๋ธ ๋ถํด ์์ด ์ฌ๊ตฌ์ฑ ๊ฐ๋ฅ |
- ์์๊ฐ : ํ๋์ ์์ฑ์ ์ ์ฅ๋ ๊ฐ์ด ๋ ์ด์ ๋๋ ์ ์๋ ๋จ์ผํ ๊ฐ์์ ์๋ฏธ
- ๋ถ๋ถ ์ข
์: ๋ณตํฉํค ์ผ๋ถ์๋ง ์ข
์๋ ๊ฒฝ์ฐ
- ์ดํ ์ข
์: A → B, B → C ๊ฐ ์ฑ๋ฆฝํ๋ฉด A → C์ธ ์ํฉ
- ๋ค์น ์ข
์: ํ๋์ ํค๊ฐ ๋ ์ด์์ ๋
๋ฆฝ๋ ์์ฑ ์งํฉ์ ์ข
์๋๋ ๊ฒฝ์ฐ
- ์กฐ์ธ ์ข
์: ์๋ ํ
์ด๋ธ์ ์ฌ๋ฌ ๊ฐ๋ก ๋๋ ๋ค, ๋ค์ ์กฐ์ธํ์ ๋ ์๋ ์ ๋ณด๊ฐ ๋ณด์กด๋๋ ๊ฒฝ์ฐ
์ 1์ ๊ทํ (1NF)
- ํ ์ด๋ธ ํ ์นธ์๋ ํ๋์ ๊ฐ๋ง
- ์ค๋ณต ๋ก์ฐ, ์ปฌ๋ผX
- Primary Key (ํ ์ด๋ธ๊ณผ ์ปฌ๋ผ์ ๋ํํ ์ ์๋ ๊ฐ) ํ์ => ๊ณ ์ ์ฑ์ ๊ฐ์ง
- ํ ์ปฌ๋ผ์๋ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ฌ์ฉ (๋ ์ง ํ์ ์ด March 5th, 2024 / 2024-05-21 ์ด๋ฐ์์ผ๋ก ๋ฌ๋ผ์ ธ์๋ ์๋๋ฉฐ ํต์ผํด์ผ ํจ)
* ๋ณตํฉํค
์์ ๊ฐ์ด ๊ฐ์ ์ฑ ์ ๋์ฌ๋ฅผ ๋ ๋ฒ ํ์ ๊ฒฝ์ฐ์๋ ๋์ฌ์ผ๊น์ง ํฉ์ณ์ ๋์ฌ๊ธฐ๋ก์ ํน์ ํ ์ ์๋ค.
์ด์ฒ๋ผ ์ฌ๋ฌ ์ปฌ๋ผ์ ๋ฌถ์ด(์ด๋ฆ + ๋์ฌํ ์ฑ + ๋์ฌ์ผ) ๋ก์ฐ๋ฅผ ํน์ ํ ์ ์๋ ํค๋ฅผ ๋ณตํฉํค ๋ผ๊ณ ํ๋ค.
ํ์ง๋ง ๊ฐ ๋์ฌ๊ธฐ๋ก์ ๊ณ ์ ํ ๊ฐ์ ๋ถ์ธ๋ค๋ฉด ๋์ฑ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์๋ค. ์ด ๋ ID ๋ฅผ ๊ธฐ๋ณธํค(Primark Key, PK)๋ผ๊ณ ํ๋ค.
์ธ๋ํค(FK)
Foreign Key, ๋ค๋ฅธ ํ ์ด๋ธ์ PK๋ฅผ ์ฐธ์กฐํ๋ ํค
์์ ์์๋ ๋์๋ฒ์จ๊ฐ ๋๊ฐ๋ฐ๋ก ๊ฐ๋ช ํ์๋ ๋ฐ๋์ ๊ฐฑ์ ์ด์์ด ๋ฐ์ํ๊ณ ์๋ ์ํฉ์ด๋ค...
์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ํ์ ํ ์ด๋ธ๊ณผ ์ฑ ํ ์ด๋ธ์ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋๋๋ฐ, ๊ฐ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ฅผ ์ธ๋ํค๋ก ์ฌ์ฉํด ์ฐธ์กฐํ๊ฒ ํ๋ฉด ์ด๋ฆ์ ๋ฐฑ๋ฒ ๋ฐ๊พธ๋๋ผ๋ ๊ณ ์ ํ ๊ฐ์ธ id๋ ๋ฐ๋์ง ์์ผ๋ฏ๋ก ๊ฐฑ์ ์ด์์ ๋ฌธ์ ๊ฐ ์๋ค
ํ ์ด๋ธ ๊ด๊ณ
1. 1:1 ๊ด๊ณ (One-to-One)
ํ๋์ ๋ก์ฐ์ ๋์ํ๋ ๋ก์ฐ๊ฐ ํ๋
2. 1:N ๊ด๊ณ (One-to-Many)
ํ๋์ ๋ก์ฐ์ ๋์ํ๋ ๋ก์ฐ๊ฐ ์ฌ๋ฌ ๊ฐ
3. M:N ๊ด๊ณ (Many-to-Many)
ํ ์ด๋ธ A ๋ก์ฐ ํ๋์ ๋์ํ๋ ํ ์ด๋ธ B ๋ก์ฐ๊ฐ ์ฌ๋ฌ ๊ฐ,
ํ ์ด๋ธ B ๋ก์ฐ ํ๋์ ๋์ํ๋ ํ ์ด๋ธ A ๋ก์ฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ
์์ ๊ฒฝ์ฐ์๋ ๊ฐ๊ฐ์ ๊ฐ์์ ๊ฐ๊ฐ์ ํ์๋ค์ด ๊ฐ์๋ฅผ ์๊ฐํ๊ณ ์์ ๋์ ํ์, ๊ฐ์ ํ ์ด๋ธ์ด๋ค.
์ง๊ธ ์ํ๋ ๊ณ์ํด์ student_id์ course_id, course_name ๋ฑ ์ฌ๋ฌ ์ ๋ณด๊ฐ ๊ณ์ ๋ฐ๋ณต์ ์ฅ๋ผ ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๊ณ ์๋ค.
์๊ฐ ์ ์ฒญ์ด๋ผ๋ ์ฌ๊ฑด ์ํฐํฐ๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌํด์ ์ฐ๊ฒฐ ํ ์ด๋ธ์ ์๋ก ์์ฑํด m:n ๊ด๊ณ๋ฅผ ๋ถ๋ฆฌํ ํ์๊ฐ ์๊ธด๋ค.
์ด ๊ฒฝ์ฐ์๋ '์๊ฐ'์ด๋ผ๋ ์ฐ๊ฒฐ ํ ์ด๋ธ์ ๋ง๋ค์ด ๋ฐ์ดํฐ ์ค๋ณต์ ํด๊ฒฐํ๊ณ , '์๊ฐ'์ด๋ผ๋ ์๊ตฌ ์ฌํญ์ ๋ ์ ํํํ ์ ์๋ค.
์ 2์ ๊ทํ(2NF)
- 1์ ๊ทํ์ ๋ง์กฑ
- ๋ถ๋ถ ํจ์ ์ข ์ ์ ๊ฑฐ
- ๊ณ ์ ์ฑ, ์ต์์ฑ์ ๋ง์กฑํ๋ PK ์ง์
- ํ ์ด๋ธ์ ์ฌ๋ฌ ์ํฐํฐ๊ฐ ์์ผ๋ฉด ๋ถ๋ฆฌ
PK๋ ๋ชจ๋ ์์ฑ์ ๊ตฌ๋ถํ ์ ์๊ฒ ํด์ค์ผ ํ๋๋ฐ, ์ด๋ฅผ ํจ์์ ์ข ์์ฑ์ด๋ผ๊ณ ํ๋ค.
์ด๋ ๋์ฌ ํ ์ด๋ธ์์ ์ฑ ์ ๋ชฉ๊ณผ ์ ์ ์ด๋ฆ์ ์ฑ ID์๋ง ์ข ์ ๋์ด ์์ด ์ด๋ฅผ ๋ถ๋ถ ํจ์ ์ข ์์ด๋ผ๊ณ ํ๋ค.
๋ถ๋ถ ํจ์ ์ข ์์ ํด๊ฒฐํ๋ ค๋ฉด ์ฑ ํ ์ด๋ธ์ ๋ฐ๋ก ๋ถ๋ฆฌํ๊ณ , ๋๋จธ์ง ํ ์ด๋ธ์ ์๋ ๋ณตํฉํค๋ฅผ ์์ ๋์ฌ ํ ์ด๋ธ์ ๊ณ ์ ์ฑ๊ณผ ์ต์์ฑ์ ๋ง์กฑํ๋ PK๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
3์ ๊ทํ(3NF)
- 2์ ๊ทํ ๋ง์กฑ
- ์ดํ์ ํจ์ ์ข ์ ์ ๊ฑฐ
- ํ ์ด๋ธ์ ์ฌ๋ฌ ์ํฐํฐ๊ฐ ์์ผ๋ฉด ๋ถ๋ฆฌ
์ดํ์ ํจ์ ์ข ์์ด๋ X→Y, Y→Z ์ด๋ ์ข ์ ๊ด๊ณ๊ฐ ์์ ๊ฒฝ์ฐ, X→Z๊ฐ ์ฑ๋ฆฝ๋ ๋๋ฅผ ์๋ฏธํ๋ค.
์ ํ ์ด๋ธ์์ ๋์ฌ ID๋ ํ์ ID๋ฅผ ํน์ ํ ์ ์๊ณ , ํ์ ID๋ ํ์ ์ด๋ฆ๊ณผ ํ์ ์ฃผ์๋ฅผ ํน์ ํ ์ ์๋ค.
๋์ฌID → ํ์ID → ํ์ ์ด๋ฆ, ํ์ ์ฃผ์
=> ๋์ฌID → ํ์ ์ด๋ฆ, ๋์ฌID → ํ์ ์ฃผ์๊ฐ ์ดํ์ ํจ์ ์ข ์์ด๋ค!
์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ํ์ ํ ์ด๋ธ์ ๋ฐ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
'๋ฐ์ดํฐ๋ฒ ์ด์ค, SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ์ดํฐ๋ฒ ์ด์ค / Pagila ์น์ฑ ์์ฑํ๊ธฐ (1) (1) | 2025.05.23 |
---|---|
๋ฐ์ดํฐ๋ฒ ์ด์ค / ORM, Prisma, 3Tier (0) | 2025.05.22 |
๋ฐ์ดํฐ๋ฒ ์ด์ค / JOIN (0) | 2025.05.20 |
๋ฐ์ดํฐ๋ฒ ์ด์ค / SQL ๊ตฌ๋ฌธ ๋ฌธ๋ฒ (0) | 2025.05.20 |
๋ฐ์ดํฐ๋ฒ ์ด์ค / ๊ฐ์ (5) | 2025.05.19 |