1NF, 2NF
์ฌ๋๋ค์ด SQL ๋ฐฐ์ธ ๋ JOIN ๋ฌธ๋ฒ์ ๋งค์ฐ ์ด๋ ค์ํฉ๋๋ค.
๊ทธ๊ฑฐ ๋ฐฐ์ฐ๋ค๋ณด๋ฉด ์๋ฌธ๋ ๋ง์ด ์๊ธฐ๊ณ ์ ํ ์ด๋ธ์ ์ ์ด์ ์ฌ๋ฌ๊ฐ๋ก ๋๋ ๋๋์ง ์ดํด๋ ์๊ฐ๊ณ ์ฝ๊ฐ ๋ฐ๋ฐ์ฌ์ด ์๊ธธํ ๋ฐ ์ง๊ธ ์ค๋ช ํ ์ ๊ทํ/์ ๊ทํ์ด๋ผ๋๊ฑธ ๋ฐฐ์ฐ๊ฒ ๋๋ฉด ๋งค์ฐ ์ฌ์์ง๋๋ค.
๋ฐฐ์๋๋ฉด ๋์ค์ DB ์ค๊ณ๋ ๋์์์ด ์์์ ์ํ ์ ์์
์ 1์ ๊ทํ (1st normal form)
์ฌ๋ฌ๋ถ์ ์ง๊ธ๋ถํฐ ์ฒด์ก์ผํฐ ์ ์ฐ์์คํ ๋ง๋๋ ๊ฐ๋ฐ์์ ๋๋ค.
์ผ๋จ ์ฒด์ก์ผํฐ์ ์๊ฐ ๋ฑ๋กํ ์ฌ๋๋ค์ ํ ์ด๋ธ๋ก ์ ๋ฆฌํ๊ณ ์ถ์๊ฒ๋๋ค.
[์๊ฐ๋ฑ๋กํํฉ table]
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
102
์ํฅ๋ฏผ
ํฌ์ค
103
๊น๋ฏผ์
ํฌ์ค
๊ทธ๋์ ํ ์ด๋ธ ํ๋ ๋ง๋ค์ด์ ์ด์๊ฒ ์ ์ ์ฅ์ ํด๋จ์ต๋๋ค.
๊ทผ๋ฐ '๊น๋ฏผ์' ๋ผ๋ ์ฌ๋์ด ๋ค์ ๋ '๋ฐฐ๋๋ฏผํด์ด๊ธ'์ ๋ ์๊ฐ์ ์ฒญํ๊ฒ๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ฃ ?
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
102
์ํฅ๋ฏผ
ํฌ์ค
103
๊น๋ฏผ์
ํฌ์ค, ๊ณจํ์ด๊ธ
ํ๋์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ ์ถ๊ฐํ๋ฉด ์ด๋จ๊น์.
๊ทธ๋๋ ๋๊ธด ํฉ๋๋ค.
๊ทผ๋ฐ ๋ณดํต์ ์ด๋ ๊ฒ ํด๋์ผ๋ฉด ๋์ค์ ์ฑ๋ฅ ์ด์๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
์ ๋ ๊ฒ ๋ฌธ์๋ก ๊ธธ๊ฒ ์ ์ฅํด๋๋ฉด ์ํ๋ชฉ๋ก์ด ๊ธธ์ด์ง ์๋ก ์ฐพ๊ธฐ / ์์ / ์ญ์ ์์ ์ด ๋๋ ค์ง๋๋ค.
์ ๋ ๊ฒ ํด๋์ผ๋ฉด ์ฌ์๊ฐ ๋ฉด๋ด์๊ฐ ๊ฐ์ง์๊ณ ํจ
์ค์ JSON ๋ฐ์ดํฐํ์ ์๋๋ฉด array ๋ฐ์ดํฐํ์ (Postgres์์ ๊ฐ๋ฅ) ์ฌ์ฉํ๋ฉด
['ํฌ์ค', '๊ณจํ์ด๊ธ']
์ด๋ฐ ์์ผ๋ก ์ฌ๋ฌ๊ฐ์ ๋ฌธ์๋ ์ซ์๋ฅผ ํ ์นธ์ ์ ์ฅํ ์ ์๋๋ฐ
๊ทธ๊ฑฐ ์จ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฌธ์ ๋ ์ ์์ต๋๋ค.
์๋๋ฉด ๊ทธ๋ฅ array, JSON์ ๋ฌธ์์ ์ทจ๊ธ์ด ๋น์ทํด์ ๋์ค์ array ์๋ฃ ์์ ์ผ๋ถ ํญ๋ชฉ๋ง ์์ ํ๋๊ฒ ๋งค์ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋๋ค.
(๊ทธ๋์ ์์ ํ ๋๋ ์ ๊ฐ์ผ๋ก ์์ ๊ฐ์์น์ฐ๊ฑฐ๋ ๊ทธ๋ฐ ์์ผ๋ก ๋ง์ด ํฉ๋๋ค)
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
102
์ํฅ๋ฏผ
ํฌ์ค
103
๊น๋ฏผ์
ํฌ์ค
103
๊น๋ฏผ์
๊ณจํ์ด๊ธ
โฒ ๊ทธ๋์ ์ด๋ ๊ฒ ๋ง๋๋๊ฒ ๋ซ์ต๋๋ค.
ํ๋์ ์ ์์๋ ํ๋์ ๋ฐ์ดํฐ๋ง ๋ณด๊ดํ๋ ๊ฒ๋๋ค.
์ด ์์ ์ด ์๋ฃ๋ ํ ์ด๋ธ์ ์ 1์ ๊ทํ (1st normal form) ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ ๊ฒ ํด๋๋ฉด ์ฑ๋ฅ๋ฌธ์ ๋ ์์ด์ง๊ณ ๋์ค์ ๋ค๋ฅธ ์ปฌ๋ผ์ ์ถ๊ฐํ ๋๋ ๋ฌธ์ ๊ฐ ์์๊ธธ ์ ์์ต๋๋ค.
(์ฐธ๊ณ )
์์ ์ ๋ฐฐ์ด ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ ์ 1 ์ ๊ทํ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
ํ์ง๋ง ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ 1 ์ ๊ทํ ์ํด๋์ผ๋ฉด ๋จ์ ์ด ๋ง์์ ๋ฐ์ดํฐ ์ ์ฅํ ๋ ํญ์ ํ๋๋ก ํฉ์๋ค.
์ 2์ ๊ทํ (2nd normal form)
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
๊ฐ๊ฒฉ
๋ฉ๋ถ์ฌ๋ถ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
5000
0
102
์ํฅ๋ฏผ
ํฌ์ค
6000
1
103
๊น๋ฏผ์
ํฌ์ค
6000
1
103
๊น๋ฏผ์
๊ณจํ์ด๊ธ
8000
0
์๊น ์ 1์ ๊ทํ ํด๋์ ํ ์ด๋ธ์ด ์์ต๋๋ค.
์ฌ์ฌํด์ ๊ฐ ํ๋ก๊ทธ๋จ๋ง๋ค '๊ฐ๊ฒฉ'์ด๋ '๋ฉ๋ถ์ฌ๋ถ'๋ฅผ ๊ธฐ๋กํ๋ ์ปฌ๋ผ๋ ๋ง๋ค์ด๋จ์ต๋๋ค.
์ ๋์๊ฐ ๊ฒ ๊ฐ์๋ฐ ๊ทผ๋ฐ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์๊ธธ ์๋ ์์ต๋๋ค.
Q. 'ํฌ์ค' ํ๋ก๊ทธ๋จ์ ๊ฐ๊ฒฉ์ ์ค๋ฅ๊ฐ ์์ด์ 6000์์ 7000์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผํ๋ฉด ์ด๋ป๊ฒ ํ ๊น์?
- 2๊ฐ ๊ฐ๊ฐ ์์ ํ๋ฉด ๋ฉ๋๋ค.
Q. ๊ทผ๋ฐ ํ์์๊ฐ ๋์ด๋์ 'ํฌ์ค'๋ฅผ ์ ์ฒญํ ์ฌ๋์ด 100๋ช ์ด๋ฉด ์ด์ฉ์ฃ ?
100๊ฐ ํ์ ๊ณ ์น๋ ๋ถ์์ฌ๊ฐ ์๊ธฐ๋๊ฒ ์ซ๋ค๋ฉด
ํ์ฌ ํ ์ด๋ธ์ ์ฃผ์ ์ ๊ด๋ จ์๋ ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ์ฎ๊ธฐ์ญ์์ค.
[์๊ฐ๋ฑ๋กํํฉ table]
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
๋ฉ๋ถ์ฌ๋ถ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
0
102
์ํฅ๋ฏผ
ํฌ์ค
1
103
๊น๋ฏผ์
ํฌ์ค
1
103
๊น๋ฏผ์
๊ณจํ์ด๊ธ
0
[ํ๋ก๊ทธ๋จ table]
ํ๋ก๊ทธ๋จ
๊ฐ๊ฒฉ
์ค์ฟผ์์ด๊ธ
5000
ํฌ์ค
6000
๊ณจํ์ด๊ธ
8000
'๊ฐ๊ฒฉ' ์ปฌ๋ผ์ ์๊ฐ๋ฑ๋กํํฉ๊ณผ ๋ณ๋ก ์๊ด์ด ์๊ณ 'ํ๋ก๊ทธ๋จ' ์ข ๋ฅ์ ๋ฐ๋ผ์ ๊ฒฐ์ ๋ ๋ฟ์ ๋๋ค.
๊ทธ๋์ '๊ฐ๊ฒฉ' ์ปฌ๋ผ์ ํ์ฌ ํ ์ด๋ธ์ ์ฃผ์ ์ ๋ง์ง ์๊ธฐ ๋๋ฌธ์
๊ทธ๊ฑธ ์๋ผ๋ด์ ์๋ก์ด ํ ์ด๋ธ ๋ง๋ค์ด์ ๊ฑฐ๊ธฐ ๋ฃ์ด๋ดค์ต๋๋ค.
์ด ์์ ์ด ์๋ฃ๋ ํ ์ด๋ธ์ ์ 2์ ๊ทํ (2nd normal form) ์ด๋ผ๊ณ ํฉ๋๋ค.
์ฅ์ ์ ์๊น์ฒ๋ผ 'ํฌ์ค'์ ๊ฐ๊ฒฉ์ด ์์ ๋์ด์ผํ ๋ 100๊ณณ์ ์์ ํ ํ์๊ฐ ์์ด์ง
๋ฌผ๋ก ์ด๋ฌ๋ฉด ๋จ์ ๋ ์๋๋ฐ ๋์ค์ ๊น๋ฏผ์๋ผ๋ ์ฌ๋์ด ์ผ๋ง๋ฅผ ๋ด์ผํ ์ง ์กฐํํ๋๊ฒ ๊ท์ฐฎ์์ง ์ ์๋๋ฐ
๊ทธ๊ฑด ๋์ค์ SQL JOIN ๋ฌธ๋ฒ ์ฐ๋ฉด ๋ฉ๋๋ค.
์ 2์ ๊ทํ - ๊ต๊ณผ์๋ฒ์
์ 2์ ๊ทํ์ ๊ต๊ณผ์์ ์ ์๋ partial dependency๋ฅผ ์ ๊ฑฐํ ํ ์ด๋ธ์ ๋๋ค.
์ฝ๊ฒ ์ค๋ช ํด๋ณด์๋ฉด
1. composite primary key ๋ผ๋๊ฒ ์์ต๋๋ค.
primary key๋ ํ์ ์๋ก ๊ตฌ๋ถํ ์ ์๋ ์ ๋ํฌํ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ์ปฌ๋ผ์ ๋๋ค.
๊ทผ๋ฐ ๊ฐ๋์ ํ๋์ ์ปฌ๋ผ๋ง์ผ๋ก primary key๋ฅผ ์ ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
๊ฐ๊ฒฉ
๋ฉ๋ถ์ฌ๋ถ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
5000
0
102
์ํฅ๋ฏผ
ํฌ์ค
6000
1
103
๊น๋ฏผ์
ํฌ์ค
6000
1
103
๊น๋ฏผ์
๊ณจํ์ด๊ธ
8000
0
โฒ ์์ ํ ์ด๋ธ์์ (ํ์๋ฒํธ + ํ๋ก๊ทธ๋จ) ์ด๋ ๊ฒ ์กฐํฉํด์ผ primary key ์ญํ ์ ์ํํ ์ ์์ต๋๋ค.
'ํ์๋ฒํธ' ๋ง์ผ๋ก primary key ์ญํ ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
'ํ๋ก๊ทธ๋จ' ๋ง์ผ๋ก primary key ์ญํ ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ทผ๋ฐ ๋๊ฐ ํฉ์น๋ฉด primary key ์ญํ ๊ฐ๋ฅ
๋๊ฐ ์ปฌ๋ผ์ ํฉ์น primary key๋ฅผ composite primary key ๋ผ๊ณ ํฉ๋๋ค.
2. composite primary key ์ค์ ํ๋์ ์ปฌ๋ผ์๋ง ์ข ์๋์ด ์๋ ๋ฐ๊น๋ฆฌ ์ปฌ๋ผ์
partial dependency๊ฐ ์๋ค๊ณ ํํํฉ๋๋ค.
3. partial dependency๊ฐ ์๋ ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ๋นผ๋ฉด ์ 2์ ๊ทํ ํ ์ด๋ธ ์์ฑ์ ๋๋ค.
๊ทธ๋์ ์์ ์์์ '๊ฐ๊ฒฉ' ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ๋นผ๋ ๊ฒ์ ๋๋ค.
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
๊ฐ๊ฒฉ
์ค๋น๋ฌผ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
5000
๋ผ์ผ
102
์ํฅ๋ฏผ
ํฌ์ค
6000
์์
103
๊น๋ฏผ์
ํฌ์ค
6000
์์
103
๊น๋ฏผ์
๊ณจํ์ด๊ธ
8000
๊ณจํ์ฑ
Q1. ์ ํ ์ด๋ธ์์ '์ค๋น๋ฌผ' ์ปฌ๋ผ์ partial dependency๊ฐ ์์๊น์ ์์๊น์?
ํ์๋ฒํธ
ํ์์ด๋ฆ
ํ๋ก๊ทธ๋จ
๊ฐ๊ฒฉ
๋ฉ๋ถ์ฌ๋ถ
101
๊ฐํธ๋
์ค์ฟผ์์ด๊ธ
5000
0
102
์ํฅ๋ฏผ
ํฌ์ค
6000
1
103
๊น๋ฏผ์
ํฌ์ค
6000
1
103
๊น๋ฏผ์
๊ณจํ์ด๊ธ
8000
0
Q2. ์ ํ ์ด๋ธ์์ '๋๋ฉ๋ถ์ฌ๋ถ' ์ปฌ๋ผ์ partial dependency๊ฐ ์์๊น์ ์์๊น์?
(ํ) ์ข ์๊ด๊ณ ํ๋จ์ด ์ด๋ ต๋ค๋ฉด ํ๋์ ์ปฌ๋ผ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋ณด์ญ์์ค.
๊ทธ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ปฌ๋ผ๋ ๋ณ๊ฒฝ๋์ด์ผํ๋ค๋ฉด ๊ทธ ๊ด๊ณ๋ฅผ ์ข ์๊ด๊ณ๋ผ๊ณ ํฉ๋๋ค.
partial dependency ์ค๋ช
๋งํฌ
โจ ์ค์ต.
ํ์๋ช
์ฑ ์ด๋ฆ
๋ ์ง
ํ์๋ฑ๊ธ
์ฑ ๊ฐ๊ฒฉ
๋ฐ๋ฉ์ฌ๋ถ
lee
๋์์ธ์ฑ
1์1์ผ
์ฐ์
1000
1
kim
๋งํ์ฑ
1์2์ผ
์ผ๋ฐ
2000
0
park
SQL์ฑ
1์3์ผ
์ผ๋ฐ
1000
1
park
์์ค์ฑ
1์3์ผ
์ผ๋ฐ
2000
0
Q1. ์ ํ ์ด๋ธ์์ ์ฑ ๊ฐ๊ฒฉ ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ์ฎ๊ธฐ๋๊ฒ ์ข์๊น์?
Q2. ์ ํ ์ด๋ธ์์ ํ์๋ฑ๊ธ ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ์ฎ๊ธฐ๋๊ฒ ์ข์๊น์?
Q3. ์ ํ ์ด๋ธ์์ ๋ฐ๋ฉ์ฌ๋ถ ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ์ฎ๊ธฐ๋๊ฒ ์ข์๊น์?
โป ์ ๊ทํ ์ค๋ช ์ฐธ์กฐ ๋ธ๋ก๊ทธ
Last updated