์ ๊ทํ(Normalization)
๐ ์ ๊ทํ๋?
์ ๊ทํ(Normalization)๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์์ ์ค๋ณต์ ์ต์ํํ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๋ ์์ ์ด๋ค. ์ ๊ทํ๋ฅผ ํด์ค์ผ๋ก์จ ์ฝ์ , ์ญ์ , ๊ฐฑ์ ๋ฑ ์ด์ํ์์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ ๋ค. ์ ๊ทํ์ ๋ชฉํ๋ ์ด์์ด ์๋ ๊ด๊ณ๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ์๊ณ ์ ์กฐ์ง๋ ๊ด๊ณ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ํฌ๊ณ , ์ ๋๋ก ์กฐ์ง๋์ง ์์ ํ ์ด๋ธ๋ค์ ๋ฌด์์ค ๋ถํดํด์ ์๊ณ ์ ์กฐ์ง๋ ํ ์ด๋ธ๋ก ๋๋๋ ๊ฒ์ ๋งํ๋ค.
โ ์ 1์ ๊ทํ
ํ ์ด๋ธ์ ์ปฌ๋ผ์ด ์์๊ฐ(Atomic Value, ํ๋์ ๊ฐ)์ ๊ฐ๋๋ก ํ ์ด๋ธ์ ๋ถํดํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด (์ด๋ฆ, ๋์ด, ์ทจ๋ฏธ)๋ฅผ ์ปฌ๋ผ์ผ๋ก ๊ฐ์ง [๊ณ ๊ฐ์ทจ๋ฏธ] ํ ์ด๋ธ์ด ์๋ค.
์ด ํ ์ด๋ธ์์ ์ฅ์์๊ณผ ์์ด์ ๋ ์ทจ๋ฏธ๊ฐ ์ฌ๋ฌ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ 1์ ๊ทํ์ด ์๋๋ค.
๊ทธ๋์ ์ด ํ ์ด๋ธ์ ์ 1์ ๊ทํ ๋์์ด ๋๊ณ , ์ด๋ฅผ ์ 1์ ๊ทํ ํด์ ๋ถํดํ ์ ์๋ค.
์ 1์ ๊ทํ๊ฐ ์งํ๋ ํ ์ด๋ธ์ ์๋์ ๊ฐ๋ค. ๋ชจ๋ ์ปฌ๋ผ์ด ์์๊ฐ์ ๊ฐ์ง๋ค.
โ ์ 2์ ๊ทํ
์ 2์ ๊ทํ๋ ์ 1์ ๊ทํ๊ฐ ์งํ๋ ํ ์ด๋ธ์ ๋ํด, ์์ ํจ์ ์ข ์กฑ์ ๋ง์กฑํ๋๋ก ํ ์ด๋ธ์ ๋ถํดํ๋ ๊ณผ์ ์ด๋ค.
์ฌ๊ธฐ์ ๋งํ๋ '์์ ํจ์ ์ข ์'์ด๋ผ๋ ๊ฒ์ ๊ธฐ๋ณธํค์ ๋ถ๋ถ์งํฉ์ด ๊ฒฐ์ ์๊ฐ ๋์ด์ ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ฅผ "๋ถ๋ถ ํจ์ ์ข ์ ์ ๊ฑฐ" ๋ผ๊ณ ๋ ํ๋ค. ๋ค์ ๋งํด, ๊ธฐ๋ณธํค ์ค์ ํน์ ์ปฌ๋ผ์๋ง ์ข ์๋ ์ปฌ๋ผ์ด ์์ด์ผ ๋๋ค๋ ๊ฒ์ด๋ค.
* ๊ฒฐ์ ์: ๋ฆด๋ ์ด์ ์์ ๋ค๋ฅธ ์์ฑ์ ๊ณ ์ ํ๊ฒ ๊ฒฐ์ ํ๋ ์์ฑ
์ด ํ ์ด๋ธ์์ ๊ธฐ๋ณธํค(primary key) ๋ (ํ์๋ฒํธ, ๊ฐ์ข์ด๋ฆ)์ด๋ฉฐ ๋ณตํฉํค ๊ตฌ์กฐ์ด๋ค.
(ํ์๋ฒํธ, ๊ฐ์ข์ด๋ฆ)์ด ํ์์ ์ฑ์ ์ ๊ฒฐ์ ํ๊ณ ์๋ค.
(ํ์๋ฒํธ, ๊ฐ์ข์ด๋ฆ) --> (์ฑ์ )
ํ์ง๋ง ๊ฐ์์ค ์ปฌ๋ผ์ ๊ธฐ๋ณธํค์ ๋ถ๋ถ์งํฉ์ธ ๊ฐ์ข์ด๋ฆ์ ์ํด ๊ฒฐ์ ๋ ์ ์๋ค.
(๊ฐ์ข์ด๋ฆ) --> (๊ฐ์์ค)
๊ธฐ๋ณธํค(ํ์๋ฒํธ, ๊ฐ์ข์ด๋ฆ)์ ๋ถ๋ถํค์ธ ๊ฐ์ข์ด๋ฆ์ด ๊ฒฐ์ ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ์ ํ ์ด๋ธ์ ์ 2์ ๊ทํ์ ๋ง์กฑํ์ง ๋ชปํ๋ค. ์ด ํ ์ด๋ธ์ด ์ 2์ ๊ทํ์ด ๋๊ธฐ ์ํด์๋ ๊ฐ์์ค์ ๋ผ์ด ๋ด์ด ๋ณ๋์ ํ ์ด๋ธ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค.
์ 2์ ๊ทํ๋ฅผ ์ฝ๊ฒ ์ค๋ช ํ๋ฉด, ํ์ฌ ํ ์ด๋ธ์ ์ฃผ์ ์ ๊ด๋ จ์๋ ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ๋นผ๋ ์์ ์ด๋ค. ํ์ฌ ํ ์ด๋ธ์์ ๊ฐ์์ค ์ปฌ๋ผ์ ๊ฐ์ข์ด๋ฆ์ ๋ฐ๋ผ์๋ง ๊ฒฐ์ ์ด๋๋ค. ๋๋จธ์ง ์ปฌ๋ผ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค. ์ฆ ํ๋์ ์ปฌ๋ผ์๋ง ์ข ์์ด ๋์ด์๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์ ๊ฐ์์ค์ด๋ผ๋ ์ปฌ๋ผ์ ๊ฐ์ข์ด๋ฆ์ด๋ผ๋ ์ปฌ๋ผ์ ๋ถ๋ถ์ ํจ์ ์ข ์(partial dependency)์ด ์๋ค๊ณ ๋งํ ์ ์๋ ๊ฒ์ด๋ค. ์ฆ, ๋ณตํฉ ๊ธฐ๋ณธํค(composite primary key๋ค) ์ค ํ๋์๋ง ์ข ์๊ด๊ณ๋ฅผ ๋ณด์ด๋ ๊ฒ, ๊ทธ๊ฒ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ๋นผ๋ฒ๋ฆฌ๋ ๊ฒ์ด ์ 2 ์ ๊ทํ์ด๋ค.
์ ํ ์ด๋ธ์ ์ 2์ ๊ทํ ํ๋ฉด ์๋์ ๊ฐ์ ๋ชจ์ต์ด ๋๋ค.
๊ทธ๋ผ ํ ์ด๋ธ์ ์์ฒ๋ผ ์ 2์ ๊ทํํ๋ฉด ์ด๋ค ์ฅ์ ์ด ์์๊น? ์๋ฅผ ๋ค์ด ์ํ์์ด ๊ฐ์์ค์ด ๋ณ๊ฒฝ๋์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
์ 2์ ๊ทํ ๋์ง ์์ ์ํ์์๋ ์ฌ๋ฌ ํ์ ์์ ํด์ฃผ์ด์ผ ํ์ง๋ง, ๊ฐ์์ค ํ ์ด๋ธ์์ ํ ๋ฒ๋ง ์์ ํด ์ฃผ๋ฉด ๋๋ค.
โ ์ 3์ ๊ทํ
์ 3์ ๊ทํ๋ ์ 2์ ๊ทํ๋ฅผ ์งํํ ํ ์ด๋ธ์ ๋ํด ์ดํ ํจ์ ์ข ์์ ์์ ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ถํดํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋งํ๋ '์ดํ ํจ์ ์ข ์'์ด๋ผ๋ ๊ฒ์ A->B, B->C๊ฐ ์ฑ๋ฆฝํ ๋ A->C๊ฐ ์ฑ๋ฆฝ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ ๊ฒ ์ค๋ช
ํ๋ฉด ์กฐ๊ธ ์ด๋ ค์ธ ์ ์๋๋ฐ, ์ฌ์ค ์ 2์ ๊ทํ์ ๊ฐ๋
์ ์ดํดํ๋ค๋ฉด, 3์ ๊ทํ์ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
์๋์ ํ๋ ๋ถ๋ถ ํจ์ ์ข
์(particial dependency)์ด ์๋ค. ์ ์ด๋ถํฐ ๋ณตํฉ ๊ธฐ๋ณธํค(composite primary key) ์์ฒด๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฌํ ํ
์ด๋ธ์์ ํ์ฌ ์ถ์ ๋ํ์ด๋ผ๋ ์ปฌ๋ผ์ ํ๋ก๊ทธ๋จ(primarykey)์๋ ์๋ฌด ๊ด๊ณ๊ณผ ์๋ค. ๊ทธ์ ๊ฐ์ฌ๋ผ๋ ์ปฌ๋ผ์ ์ข
์๋์ด ์์ ๋ฟ์ด๋ค.
์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ์ 2์ ๊ทํ์ ๋ค๋ฅด๊ฒ ๋ถ๋ถํจ์์ข ์(particial dependency)์ด ์์ผ๋ฉด์ ๊ธฐ๋ณธํค๊ฐ ์๋ ์ด๋ ํ ์นผ๋ผ์ ์ข ์๋๋ ํํ๋ฅผ ๋ณด์ผ๋ ์ด๊ฒ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ๋ฐ๋ก ๋นผ์ฃผ๋ ๊ฒ์ ์ 3์ ๊ทํ์ด๋ผ๊ณ ํ๋ค.
์ 3์ ๊ทํ๋ฅผ ํ๋ฉด ์ 2์ ๊ทํ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์ด ํธ๋ฆฌํด์ง๋ค๋ ์ฅ์ ์ด ์์ผ๋,
๊ฐ์ฌ์ ์ถ์ ๋ํ์ ์์๋ณด๋ ค๋ฉด, ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ฐ์ด ์ฐธ์กฐํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
์ ํ ์ด๋ธ์ ์ 3์ ๊ทํ ์ํค๋ฉด ์๋์ ๊ฐ์์ง๋ค.
โ BCNF ์ ๊ทํ (๋ณด์ด์ค-์ฝ๋) ์ ๊ทํ
BCNF์ ๊ทํ๋ ์ 3์ ๊ทํ๋ฅผ ์งํํ ํ ์ด๋ธ์ ๋ํด ๋ชจ๋ ๊ฒฐ์ ์๊ฐ ํ๋ณดํค๊ฐ ๋๋๋ก ํ ์ด๋ธ์ ๋ถํดํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ค๋ช ํ๋ฉด ์กฐ๊ธ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์๋ ํน๊ฐ์๊ฐ ํ ์ด๋ธ์ ์ดํด๋ณด์.
ํน๊ฐ์๊ฐ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค๋ ๋ณตํฉํค๋ก (ํ์๋ฒํธ, ํน๊ฐ์ด๋ฆ)์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ๋ณธํค๋ ๊ต์๋ฅผ ๊ฒฐ์ ํ๋ค.
ํ์ง๋ง ์ด ํ ์ด๋ธ์์ ๊ต์๋ ํน๊ฐ์ด๋ฆ์ ๊ฒฐ์ ํ๋ค.
๊ต์๋ ํน๊ฐ์ด๋ฆ์ ๊ฒฐ์ ํ๋ ๊ฒฐ์ ์์ด์ง๋ง, ํ๋ณดํค๋ ์๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ BCNF ์ ๊ทํ๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด์ ์์ ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ด ๋ถํดํ ์ ์๋ค.
โ ํฌ์คํ ์ ์ฐธ์กฐํ ๋ธ๋ก๊ทธ โ
์ ๊ทํ์ ๊ฐ๋ ๊ณผ ๋จ๊ณ๋ณ ์กฐ๊ฑดโผ
์ ๊ทํ(Normalization) - 1์ฐจ 2์ฐจ 3์ฐจ BCNF โผ
์ ๊ทํ(Normalization) ์ฝ๊ฒ ์ดํดํ๊ธฐ โผ
'Coding > SQL&DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLD] JOIN (Inner, Outer, Self, Natural, Cross JOIN) (6) | 2024.11.17 |
---|---|
[SQLD] NULL ๊ด๋ จ ํจ์, CASE, DECODE, SQL์คํ์์ (5) | 2024.11.16 |
[SQLD] SQL ๊ธฐ๋ณธ ํจ์ (๋ฌธ์์ด, ์ซ์, ๋ ์ง ๋ฑ) (7) | 2024.11.16 |
[SQLD] ์ ๊ทํ, ๋ฐ์ ๊ทํ (36) | 2024.11.16 |
[SQLD] ๋ฐ์ดํฐ๋ชจ๋ธ๋ง์ ์ดํด (6) | 2024.11.16 |