[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ ๊ทํ(Normalization)
์ ๊ทํ(Normalization)
์ง๋ ํฌ์คํธ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ํ๋ ์ด์ ํ์, ๊ทธ๋ฆฌ๊ณ ํจ์์ ์ข ์์ ๋ํด ์ ๋ฆฌํ์ต๋๋ค. ์ค๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด์ ํ์์ ํด๊ฒฐํ๋ ํ์ค์ธ ์ ๊ทํ(Normalization)๋ฅผ ์ ๋ฆฌํด๋ด ์๋ค.
์ ๊ทํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๋ค์ด ์๋ก ์ด์ ํ์์ ๋ง๋ค์ง ์๋๋ก ํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค. 1NF ๋ถํฐ 6NF, ๊ทธ๋ฆฌ๊ณ BCNF ๊ฐ ์์ง๋ง ์ด ํฌ์คํธ์์๋ 1NF ~ 3NF ๊ทธ๋ฆฌ๊ณ BCNF์ ๋ํด ์ ๋ฆฌํ๋๋ก ํ๊ฒ ์ต๋๋ค.
1NF(First Normal Form)
๐ก ํ ์ด๋ธ์ ๋ชจ๋ ์์ฑ์ด atomic value์ด์ด์ผ ํ๋ค.
์ 1 ์ ๊ทํ์ ๊ท์น์ ๋จ์ํฉ๋๋ค. ์ฌ๊ธฐ์ atomic value๋ ๋ ์ด์ ์ชผ๊ฐ์ง ์ ์๋ ๊ฐ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ ๋ง ๋จ์ํ๊ฒ ๊ฐ ์์ฑ์ด ํ๋์ ๊ฐ๋ง์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
student_id | student_name | department | course_id |
1 | ์ฌํ | ์ ์ | 1, 2, 3 |
2 | ์ค์ด | ์์ฌ | 3 |
์์ ๊ฐ์ ํ ์ด๋ธ์ด ์๋ค๊ณ ํด๋ด ์๋ค. 1NF ๋ฅผ ๋ง์กฑํ๋ ค๋ฉด ๋ชจ๋ ์์ฑ์ด ์์๊ฐ์ ๊ฐ์ ธ์ผํ๋๋ฐ, ์ฒซ๋ฒ์งธ ๋ ์ฝ๋์ course_id๋ฅผ ๋ณด๋ฉด 3๊ฐ์ ๊ฐ์ด ํฉ์ฑ๋์ด ๋ค์ด๊ฐ์์ต๋๋ค. ๋ฐ๋ผ์ 1NF๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด ์ด ํํ์ atomicํ๊ฒ ์ชผ๊ฐ์ฃผ์ด์ผ ํฉ๋๋ค.
student_id | student_name | department | course_id |
1 | ์ฌํ | ์ ์ | 1 |
1 | ์ฌํ | ์ ์ | 2 |
1 | ์ฌํ | ์ ์ | 3 |
2 | ์ค์ด | ์์ฌ | 3 |
์ค๋ณต๋ ์ ๋ณด๊ฐ ๋ง์ด ๋ค์ด๊ฐ ์์ด ๋ณ๋ก ์ข์ ํ ์ด๋ธ๋ก ๋ณด์ด์ง๋ ์์ง๋ง 1NF์ ๋ง์กฑ๋๋ ํ ์ด๋ธ์ด ์์ฑ๋์์ต๋๋ค.
2NF (Second Normal Form)
๐ก1NF ๋ฅผ ๋ง์กฑํด์ผ ํ๋ค.
๐กํ ์ด๋ธ์ ๋ชจ๋ ์์ฑ์ด ๊ธฐ๋ณธํค์ ๋ํด ์์ ํจ์์ ์ข ์์ ๋ง์กฑํด์ผ ํ๋ค. ์ฆ, ๋ถ๋ถ ํจ์์ ์ข ์์ด ์กด์ฌํ๋ฉด ์๋๋ค.
Normalization์ ์ฐจ์๊ฐ ์ฌ๋ผ๊ฐ์๋ก ์ด์ ์ฐจ์์ ๊ท์น์ ํฌํจํ๊ฒ ๋ฉ๋๋ค. ์ 2 ์ ๊ทํ์ ์ 1 ์ ๊ทํ์ ๋ง์กฑํ๋ฉด์ ๋์์ ๊ท์น์ด ํ๋ ๋ ์ถ๊ฐ๋ฉ๋๋ค. ๋ชจ๋ ์์ฑ์ด ํจ์์ ์ข ์์ฑ์ ๋ง์กฑํด์ผํ๋ค๋๊ท์น์ ๋๋ค. ์ด ์ ๊ทํ์ ๋ง์กฑ์ํค๊ธฐ ์ํด์๋ ํ ์ด๋ธ ๋ด์ ๋ชจ๋ ํจ์์ ์ข ์์ฑ ๊ด๊ณ๋ฅผ ๋จผ์ ํ์ ํ๋๊ฒ ์ข์ต๋๋ค.
student_id | course_name | class_room | grade |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 | 3.0 |
2 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 | 3.5 |
3 | ์๊ณ ๋ฆฌ์ฆ | 411 | 2.5 |
4 | ์ฌ๋ฆฌํ๊ฐ๋ก | 102 | 4.5 |
์ ํ ์ด๋ธ์์ ํจ์์ ์ข ์์ฑ์ ๋ชจ๋ ๋์ดํด๋ด ์๋ค.
- {student_id, course_name} -> class_room
- {student_id, course_name} -> grade
- {course_name} -> class_room
1๋ฒ๊ณผ 3๋ฒ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, {student_id, course_name} ์ ๋ชจ๋ ์์ง ๋ชปํด๋, course_name๋ง ์๊ณ ์๋ค๋ฉด, class_room์ ํน์ ํ ์ ์์ต๋๋ค. class_room์๋ ๋ถ๋ถ์ ํจ์์ ์ข ์์ด ๋ฐ์ํฉ๋๋ค.
๋ชจ๋ ์์ฑ๋ค์ด ์์ ํจ์์ ์ข ์์ ํ๋๋ก ๋ง๋ค๊ธฐ ์ํด์๋ ๋ถ๋ถ์ ํจ์์ ์ข ์์ด ๋ฐ์ํ๋ ์์ฑ์ ์๋ก์ด ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํด์ฃผ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
student_id | course_name | grade |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 3.0 |
2 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 3.5 |
3 | ์๊ณ ๋ฆฌ์ฆ | 2.5 |
4 | ์ฌ๋ฆฌํ๊ฐ๋ก | 4.5 |
course_name | class_room |
๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 |
๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 |
์๊ณ ๋ฆฌ์ฆ | 411 |
์ฌ๋ฆฌํ๊ฐ๋ก | 102 |
์ด๋ ๊ฒ ๋ ํ ์ด๋ธ๋ก ๋๋์ด ์ฃผ๋ฉด ๊ฐ๊ฐ์ ํ ์ด๋ธ์ด ํจ์์ ์ข ์์ฑ์ ์์ ํ ๋ง์กฑํ๋ ๊ฒ์ ํ์ธํ ์ ์๊ณ 2NF๋ฅผ ๋ง์กฑํ๋ ํ ์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค.
3NF (Third Normal Form)
๐ก2NF ๋ฅผ ๋ง์กฑํด์ผํ๋ค.
๐ก๊ธฐ๋ณธํค๊ฐ ์๋ ์์ฑ์ด ๊ธฐ๋ณธํค์ ์ดํ์ ํจ์์ ์ข ์์ ๊ฐ์ง๋ฉด ์๋๋ค.
์ดํ์ ํจ์์ ์ข ์(Transitive Functional Dependency)์ ์๋์ ๊ฐ์ด ์ํ์ ์ผ๋ก ํ๊ธฐํ ์ ์์ต๋๋ค.
if X -> Y, Y -> Z then X -> Z
โ
student_id | course_name | class_room | grade |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 | 3.0 |
2 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 | 3.5 |
3 | ์๊ณ ๋ฆฌ์ฆ | 411 | 2.5 |
4 | ์ฌ๋ฆฌํ๊ฐ๋ก | 102 | 4.5 |
์ ํ ์ด๋ธ์์ student_id ๋ ๊ธฐ๋ณธํค๋ก ํ ์ด๋ธ์ ํํ์ ํน์ ํ ์ ์๊ฒ ํฉ๋๋ค.
์ฌ๊ธฐ์ ์ดํ์ ํจ์ ์ข ์์ด ๋ฐ์ํ๋์ง ํ์ธํด๋ด ์๋ค.
- student_id(X) -> course_name(Y)
- course_name(Y) -> class_room(Z)
- student_id(X) -> class_room(Z)
์ ํ ์ด๋ธ์์ ์ข ์๊ด๊ณ๋ฅผ ๋ณด๋ฉด, student_id ๋ฅผ ํตํด course_name ์ ํน์ ํ ์ ์๊ณ , course_name ์ ํตํด class_room ์ ํน์ ํ ์ ์๊ธฐ ๋๋ฌธ์, student_id ๊ฐ class_room ์ ํน์ ํ๊ฒ ๋ฉ๋๋ค. ์ฆ ์ดํ์ ํจ์์ ์ข ์์ธ X->Y, Y->Z, then X->Z ๊ฐ ์ฑ๋ฆฝํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์์๋ ๊ธฐ๋ณธํค๊ฐ ์๋ ๋ค๋ฅธ ํค๋ฅผ ํตํด ํน์ ํ ์์ฑ์ ์๋ณํ ์ ์์ผ๋ฉด ์๋ฉ๋๋ค. ์ ์์์์๋ ๊ธฐ๋ณธํค๊ฐ ์๋ course_name์ด class_room์ ํน์ ํ๊ธฐ ๋๋ฌธ์ ์ดํ์ ํจ์์ ์ข ์์ด ๋ฐ์ํฉ๋๋ค.
์ด๋ฐ ๊ด๊ณ๋ฅผ ๋ถ๋ฆฌํด์ค ๋๋, X, Y ๋ฅผ ๋ฐ๋ก ํ ํ ์ด๋ธ, Y, Z ๋ฅผ ๋ฐ๋ก ํ ํ ์ด๋ธ๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
student_id | course_name |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค |
2 | ๋ฐ์ดํฐ๋ฒ ์ด์ค |
3 | ์๊ณ ๋ฆฌ์ฆ |
course_name | class_room |
๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 |
๋ฐ์ดํฐ๋ฒ ์ด์ค | 203 |
์๊ณ ๋ฆฌ์ฆ | 411 |
์ฌ๋ฆฌํ๊ฐ๋ก | 102 |
์ด์ ์ดํ์ ํจ์์ข ์์ด ๋ฐ์ํ์ง ์๋ ํ ์ด๋ธ ๋ ๊ฐ๊ฐ ๋ง๋ค์ด์ก๊ณ 3NF๋ฅผ ๋ง์กฑํ๋ ํ ์ด๋ธ์ด ๋์์ต๋๋ค.
BCNF (Boyce Codd Normal Form)
๐ก3NF๋ฅผ ๋ง์กฑํ๋ค
๐กX->Y ์ผ ๋, ๋ชจ๋ X๋ ํญ์ Candidate Key ์ด๊ฑฐ๋ Y ์ ์ํด์ผํ๋ค.
BCNF ๋ ์ 3 ์ ๊ทํ์ ์กฐ๊ธ ๋ ๊ฐํํ ํํ์ ๋๋ค.
student_id | course_name | professor |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | ์ฌํ |
2 | ๋ชจ๋ฐ์ผ์ฑ๊ฐ๋ฐ | ์ค์ด |
3 | ์๊ณ ๋ฆฌ์ฆ | ์ง์ |
4 | ๋ชจ๋ฐ์ผ์ฑ๊ฐ๋ฐ | ์ค์ด |
์ ๊ฐ์ ํ ์ด๋ธ์ด ์๋ค๊ณ ํ๊ณ , ๋จผ์ ๊ฐ ์ ๊ทํ ๋ชจ๋ธ์ ๋ง์กฑํ๋์ง ํ์ธํด๋ด ์๋ค.
- 1NF: ๋ชจ๋ ์์ฑ๋ค์ atomicํ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.
- 2NF: ๊ธฐ๋ณธํค์ ๋ํด ๋ถ๋ถ์ ํจ์์ ์ข
์์ด ์กด์ฌํ์ง ์๋๋ค.
- {student_id} -> {course_name, professor}
- {professor} -> course_name
- {course_name} -> professor
- 3NF: ๊ธฐ๋ณธํค๋ฅผ ์ ์ธํ ๋ชจ๋ ์์ฑ๋ ์ดํ์ ํจ์์ ์ข
์ ๊ฐ ์กด์ฌํ์ง ์๋๋ค.
- course_name -> student_id โ
- course_name -> professor -> student_id โ
- professor -> course_name -> student_id โ
- professor -> student_id โ
์ฌ๊ธฐ๊น์ง๋ง ๋ณด๋ฉด ์ ํ ์ด๋ธ์ ์ ๊ทํ๋ฅผ ๋ชจ๋ ๋ง์กฑํ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ ๋๋ค. ํ์ง๋ง ์ฌ์ ํ ์ด์ ํ์์ด ์กด์ฌํฉ๋๋ค.
- ๋ง์ฝ ์๋ก์ด ๊ฐ์ฌ์ ์ํด ์๋ก์ด ์์ ์ด ์ด๋ฆฐ๋ค๋ฉด, ์ ํ ์ด๋ธ์์ ๋งค์นญ์ํฌ student_id๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฝ์ ์ด์์ด ๋ฐ์ํ๋ค.
- student_id = 2 ๋ฅผ ์ง์ฐ๊ฒ ๋๋ฉด, ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ด๋ผ๋ ์์ ๊ณผ ์ค์ด๋ผ๋ ๊ต์์ด๋ฆ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ผ์ง๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์ญ์ ์ด์์ด ๋ฐ์ํ๋ค.
- ๋ชจ๋ฐ์ผ์ฑ๊ฐ๋ฐ ์์ ์ ๊ต์๊ฐ ๋ฐ๋๊ฒ ๋ ๊ฒฝ์ฐ์๋ ์ ํ ์ด๋ธ์์๋ ๋ ๋ช ์ด์ง๋ง, ๋ชจ๋ ์๊ฐ์์ ๋ํด์ ์ ๋ณด๋ฅผ ๋ฐ๊ฟ์ค์ผํ๋ ๊ฐฑ์ ์ด์ ๋ํ ์กด์ฌํฉ๋๋ค.
๋ฐ๋ผ์, BCNF ๋ฅผ ํตํด ์ ๊ทํ ์์ ์ ๊ฑฐ์ณ์ผ ํ ํ์๊ฐ ์์ต๋๋ค. ํ ์ด๋ธ์ ์ ์ดํด๋ณด๋ฉด, ๊ธฐ๋ณธํค๊ฐ ์๋ professor ๊ฐ course_name์ ๋ํด์ ๊ฒฐ์ ์๊ฐ ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ํ์ง๋ง professor ๋ง์ผ๋ก๋ ํ ์ด๋ธ ์ ์ฒด์์ ํํ์ ํน์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ํ๋ณดํค๊ฐ ๋ ์ ์๊ณ ๊ธฐ๋ณธํค์ ์ํ์ง๋ ์์ต๋๋ค. ๋ฐ๋ผ์ BCNF๋ฅผ ์๋ฐํ ํ ์ด๋ธ์ด ๋ฉ๋๋ค.
์งง๊ฒ ์ ๋ฆฌํ๋ฉด, ํ๋ณดํค์ด๊ฑฐ๋ ๊ธฐ๋ณธํค์ ์ํ๋ ์์ฑ์ด ์๋๋ฉด์ ๋ค๋ฅธ ์์ฑ๋ค์ ํน์ ํ๋ ์์ฑ์ด ์์ผ๋ฉด ์๋ฉ๋๋ค.
BCNF ์ค์ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์์ต๋๋ค.
- ๋จผ์ ๊ธฐ๋ณธํค๊ฑฐ๋ ํ๋ณดํค๊ฐ ์๋ ๊ฒฐ์ ์์ ํจ์ ์ข
์๊ด๊ณ๋ฅผ ์ฐพ์ต๋๋ค.
- professor(X) -> course_name(Y)
- course_name(X) -> professor(Y)
- ์ด์ ๋ ๊ฐ์ ํ
์ด๋ธ๋ก ๋ถ๋ฆฌํฉ๋๋ค. ๊ธฐ์ค์:
- XY ๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ
- X์ ์ฌ์ฉํ์ง ์์ ๋๋จธ์ง ์์ฑ๋ค๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ.
์ ๊ท์น์ ๋ฐ๋ผ ํ ์ด๋ธ์ ๋๋๋ฉด,
- professor -> course_name
professor | course_name |
์ฌํ | ๋ฐ์ดํฐ๋ฒ ์ด์ค |
์ค์ด | ๋ชจ๋ฐ์ผ์ฑ๊ฐ๋ฐ |
์ง์ | ์๊ณ ๋ฆฌ์ฆ |
- student_id -> professor
student_id | professor |
1 | ์ฌํ |
2 | ์ค์ด |
3 | ์ฌํ |
4 | ์ง์ |
์ด๋ ๊ฒ ๋๋๊ฒ ๋๋ฉด BCNF๊น์ง ๋ชจ๋ ๋ง์กฑํ๋ ๋ ๊ฐ์ ํ ์ด๋ธ๋ก ๋๋์ด์ง๋๋ค. ์ด์ BCNF๋ฅผ ๋ง์กฑํ๊ฒ ๋ฉ๋๋ค.
'๐ฎ ์จ-์์ค > ๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ํธ๋์ญ์ (Transaction) (0) | 2021.09.05 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์กฐ์ธ์ฐ์ฐ(Join Operation) (0) | 2021.09.05 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ํค(Keys) (0) | 2021.09.05 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ด์ ํ์(Anomaly) (0) | 2021.09.05 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote