๐ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ธ์ด์ธ SQL์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐฐ์ฐ๊ธฐ ์ ์, “๋ฐ์ดํฐ”๋ผ๋ ๊ฒ์ ๋ํด ๋ช ๊ฐ์ง๋ฅผ ์ดํดํ๊ณ ๋์ด๊ฐ๋๋ก ํ์. ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๋์ด ์๋์ง, ๊ทธ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ๋์ง์ ๋ํด, ์ ๋ฌธ๊ฐ ์์ค์ด ์๋ SQL์ ๋ค๋ฃจ๊ธฐ ์ํ ๊ธฐ์ด์ ์ธ ์์ค์ผ๋ก ์์๋ณด๋๋ก ํ์.
- ๋ฐ์ดํฐ์ ๊ตฌ์กฐ: ๊ด๊ณํ vs. ๋น๊ด๊ณํ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ง 5๊ฐ์ง
์์ฝ
- ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ ํฌ๊ฒ ๊ด๊ณํ ๋ฐ์ดํฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ก ๋๋ ์ ์๋ค.
- SQL์ ๊ด๊ณํ ๋ฐ์ดํฐ์ ์ฌ์ฉ๋๋ ์ธ์ด์ด๋ค.
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ์ด๋ผ๋ ๊ตฌ์กฐ๋ฅผ ๋ค๋ค.
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ ํญ์ ๊ณ ์ ํด์ผ ํ๋ฉฐ, ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ธฐ๋ณธ ํค, ์ธ๋ ํค, ์ ๊ทํ ๋ฑ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ์ ๊ตฌ์กฐ: ๊ด๊ณํ vs. ๋น๊ด๊ณํ
๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ ๊ทธ ์์ฒด๋ฟ๋ง ์๋๋ผ ์ ์ฅ์ ๊ฒฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋งค์ฐ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ด๋ค. ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํ์๊ณผ ๊ทธ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ค. ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ ํน์ ์ฃผ์ ์ ๋ํ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฌํ ์ ๋ณด๊ฐ ์ ์ฅ์ฐฝ๊ณ ์ญํ ์ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ๋๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ ๊ฒ์ด ํ์์ ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฑฐ๋ํ ๋ฌผ๋ฅ์ฐฝ๊ณ ๋ก, ๋ฐ์ดํฐ๋ฅผ ๊ทธ ์์ ์ ์ฅ๋ ๊ฐ๋ณ ์ฌ๊ณ ๋ก ์๊ฐํด ๋ณด๋ฉด ์ดํด๊ฐ ์ฌ์ธ ๊ฒ์ด๋ค. ์์ญ ์๋ฐฑ๋ง ๊ฐ์ ์ฌ๊ณ ๊ฐ ์ ์ฌ๋์ด ์๋ ๋ฌผ๋ฅ์ฐฝ๊ณ ์์ ํน์ ์ ํ์ ์ฐพ๊ธฐ ์ํด์๋, ๋จผ์ ๋ฌผ๋ฅ์ฐฝ๊ณ ๊ฐ ์ด๋ ํ ๊ตฌ์กฐ๋ก ์ ํ์ ์๋ฉํ๋์ง ์ดํดํ ํ์๊ฐ ์๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ ํ์ผ๋ก ๋๋ ์ ์๋ค. ์ฒซ ๋ฒ์งธ๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก, ์ด๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ ์ค ํ๋์ด๋ค. ์ด ๊ตฌ์กฐ์์๋ ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ด๋ผ๋ ํํ๋ก ์ ์ฅ๋๋ฉฐ, ๊ฐ ํ ์ด๋ธ์ ์ด(column)๊ณผ ํ(row)์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ ์ด์ ๋ฐ์ดํฐ์ ํน์ ์์ฑ์ ๋ํ๋ด๋ฉฐ, ๊ฐ ํ์ ๋ฐ์ดํฐ์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ธ๋ค.
๋ ๋ฒ์งธ ์ ํ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ์ด ๊ตฌ์กฐ๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ด ์๋ ์ปฌ๋ ์ (collection)์ด๋ ๋ฌธ์(document)๋ก ์ ์ฅํ๋ค. ์ด ์ ํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋น์ ํ ๋ฐ์ดํฐ, ์ฆ ํ ์คํธ๋ ์ด๋ฏธ์ง์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉํ๋ค. ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ณด๋ค ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ๋๋ค.
๊ฐ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์์ ๋ง์ ์ฅ๋จ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, ์ด๋ค ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ง๋ ๋ฐ์ดํฐ์ ์ข ๋ฅ์ ๋ชฉ์ ์ ๋ฐ๋ผ ๊ฒฐ์ ๋์ด์ผ ํ๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ํธ๋์ญ์ ์ฒ๋ฆฌ์ ๊ฐ์ ์ ๋ฌด ์ฒ๋ฆฌ์ ์ ํฉํ๋ฉฐ, ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ถ์ ์์ ์ ์ ํฉํ๋ค.
SQL์ ์ผ๋ฐ์ ์ผ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ์๋ํ๋ค. ํ๊ณผ ์ด์ด ์ ์๋ ๊ตฌ์กฐ์์ ์๋ํ ์ ์๊ธฐ ๋๋ฌธ์, ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์๋ SQL๋ณด๋ค ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ๋๋ NoSQL์ด๋ผ๋ ์ธ์ด๋ ์์ง๋ง, ์ฐ์ ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ SQL๊ณผ๋ ๋ณ๊ฐ์ ์ธ์ด๋ก ๋ณด์๋ ์ข๋ค. ๋ฐ๋ผ์ SQL์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์ ์ ์์ด๋ ์ข๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ง 5๊ฐ์ง
์๋๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ๋๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDB)์ ํน์ง์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํด ๋ ๋ด์ฉ์ด๋ค. ์๋ ๋ด์ฉ์ ์ฒ์ฒํ ์ดํดํ ์ ์๋๋ก ํ๋์ฉ ํ์ธํด ๋ณด๋๋ก ํ์.
- ๋ฐ์ดํฐ๋ ํ ์ด๋ธ์ด๋ผ๋ ๊ตฌ์กฐ์ ํ(row)๊ณผ ์ด(column)์ ํํ๋ก ์ ์ฅ๋จ
- ๊ฐ ์ด์ ํน์ ์์ฑ(attribute)์ ๋ํ๋ด๋ฉฐ, ๊ฐ ํ์ ๋ฐ์ดํฐ์ ์ธ์คํด์ค(instance)๋ฅผ ๋ํ๋
- ํ ์ด๋ธ ๋ด ๋ฐ์ดํฐ๋ ๊ณ ์ ํด์ผ ํ๋ฉฐ, ๊ณ ์ ์ฑ์ ๊ธฐ๋ณธ ํค(primary key)์ ์ํด ์ ์๋จ
- ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ ์ธ๋ ํค(foreign key)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋จ
- ๋ฐ์ดํฐ์ ์ค๋ณต์ ํผํ๊ธฐ ์ํด ์ ๊ทํ(normalization)๊ฐ ์ฌ์ฉ๋จ
1. ํ ์ด๋ธ, ๊ทธ๋ฆฌ๊ณ ํ(row)๊ณผ ์ด(column)
๋ ๋งํ ๊ฒ๋ ์์ด ๊ด๊ณํ ๋ฐ์ดํฐ์ ์ํ์ ํ์ธํ๋ฉด ๋ฐ๋ก ์ดํดํ ์ ์๋ค. ๋ฐ๋ก ์์ ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์์ ์์ ์๋์ํค๋ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํด ๋ณด์. A B C D ๋ฑ ์ํ๋ฒณ์ผ๋ก ๋ํ๋๋ ์ด(column)์ด ์๊ณ , 1 2 3 4 ์ฆ ์ซ์๋ก ๋ณด์ด๋ ํ(row)์ด ์๋ค. ์ด๋ ๊ฒ ํ๊ณผ ์ด์ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ด๋ผ๊ณ ํ๋ค.
2. ์ด์ ์์ฑ(attribute), ํ์ ์ธ์คํด์ค(instance)
ํน์ ์์ฑ, ์ธ์คํด์ค๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์๋ฆฌ์กํ ๊ฒ์ด๋ค. ์ํ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ค์ ํ๋ฒ ํ์ธํด ๋ณด์. ์ด์๋ Name, Type, HP ๋ฑ ํน์ ํฌ์ผ๋ชฌ์ ํน์ง์ ํ์ธํ ์ ์๋ ์์ฑ์ด ๋์ด๋์ด ์๊ณ , ํ์๋ Bulbasaur, Charmander, Squirtle(์์๋๋ก ์ด์ํด์จ, ํ์ด๋ฆฌ, ๊ผฌ๋ถ๊ธฐ) ๋ฑ ๊ฐ๋ณ ํฌ์ผ๋ชฌ์ ๋์ดํ๊ณ ์๋ค. ์์ฑ์ ๊ฐ๋ณ ๋ฐ์ดํฐ์ ํน์ง, ์ธ์คํด์ค๋ ์๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ํ๊ฒ ๋๋์ด์ฃผ๋ ํน์ ํ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค.
์ฐ๋ฆฌ๊ฐ ์ด์ํด์จ(Bulbasaur)์ ๊ณต๊ฒฉ๋ ฅ(Attack)์ ํ์ธํ๊ธฐ ์ํด์ ์ด๋๋ฅผ ํ์ธํด์ผ ํ ๊น? ์ด์ํด์จ์ ์ ๋ณด๋ 2ํ์ ๋์ด๋์ด ์๊ณ , ์ด ์ค ๊ณต๊ฒฉ๋ ฅ์ F์ด์์ ํ์ธํ ์ ์๋ค. ์ฆ F2๋ฅผ ํ์ธํ๋ฉด ์ด์ํด์จ์ ๊ณต๊ฒฉ๋ ฅ์ ํ์ธํ ์ ์๋ ์ ์ด๋ค. ์ด๋ ๋ฏ ํ๊ณผ ์ด์ ์กฐํฉํ์ฌ ๊ทธ ๊ด๊ณ ์์์ ๋ด๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ์ฐพ์๋ผ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
3-4. ๋ฐ์ดํฐ์ ๊ณ ์ ์ฑ๊ณผ ๊ธฐ๋ณธ ํค(primary key) / ์ธ๋ ํค (foreign key)
ํ ์ด๋ธ ๋ด์ ๋ฐ์ดํฐ๋ ํญ์ ํ ํ ํ ํ์ด ๊ณ ์ ํ๋๋ก ์ค๊ณ๋์ด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ํฌ์ผ๋ชฌ ๋๊ฐ ๋ฐ์ดํฐ์ธ๋ฐ ์ด์ํด์จ๊ฐ ์ธ๋ค ๊ฐ ํ์ ๋์์ ์กด์ฌํ ์๋ ์๋ค๋ ๊ฒ์ด๋ค. ํฌ์ผ๋ชฌ ๋ฐ์ดํฐ์์ ์ค๋ณต์ด ๋ฐ์ํ๋ฉด ์๊ณ ๋์ด๊ฐ ์ ์๊ฒ ์ง๋ง, ๋น์ฆ๋์ค์์ ์ฌ์ฉํ๋ ์ฃผ๋ฌธ ๋ด์ญ ๋ฐ์ดํฐ์์ ์ค๋ณต์ด ๋ฐ์ํ๋ฉด ํน์ ๊ฑฐ๋๊ฐ ๋ถํ๋ ค์ ธ์ ์ง๊ณ๋ ์๋, ํน์ ๋ฐ๋๋ก ๋น์ฉ์ด ๊ณผ๋คํ๊ฒ ๋ณด์ผ ์๋ ์๋ค.
ํ ์ด๋ธ์์ ๊ฐ๊ฐ์ ํ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ด์ ๊ธฐ๋ณธ ํค(primary key)๋ผ๊ณ ํ๋ค. ์ด ๊ธฐ๋ณธ ํค๋ ๊ฐ๊ฐ์ ํ์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ์ญํ ์ ํ๋ค. ๊ธฐ๋ณธ ํค๋ ์ฃผ๋ก ํ ์ด๋ธ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๊ฐ์ ํ์ ๋ํ ์ฐ์ฐ ์ฒ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ๊ธฐ๋ณธ ํค๋ ๋ณดํต ์ซ์๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ๊ฐ์ ํ์์ ์ ์ผํ ๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ ํ๊ณผ ์ด์ ๊ด๊ณ๋ฟ๋ง ์๋๋ผ ํ ์ด๋ธ๊ณผ ํ ์ด๋ธ์ ๊ด๊ณ ์ญ์ ์ค์ํ๋ค. ์ด ๊ฒฝ์ฐ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ ์ธ๋ ํค(foreign key)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋๋๋ฐ, ์ด๋ ๊ธฐ๋ณธ ํค์ ๋น์ทํ๊ฒ ํ ์ด๋ธ๊ณผ ํ ์ด๋ธ์ ๊ณ ์ ํ๊ฒ ์ฐ๊ฒฐํ ์ ์๋๋ก ํด์ฃผ๋ ์ฅ์น๋ก ์ดํดํ๋ฉด ์ฝ๋ค. ๊ธฐ๋ณธ ํค์ ์ธ๋ ํค์ ๋ํ ์ค๋ช ์ ๊ฝค ์ค์ํ๋ฏ๋ก, ๋ณ๋์ ํฌ์คํ ์ผ๋ก ์์ธํ ์ค๋ช ๋๋ฆฌ๋ ค ํ๋ค.
5. ๋ฐ์ดํฐ์ ์ค๋ณต์ ํผํ๋ ๋ฐฉ๋ฒ: ์ ๊ทํ(normalization)
์ ๊ทํ(Normalization)์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ์ ์ค๋ณต์ ์ต์ํํ๊ธฐ ์ํ ์ผ๋ จ์ ํ๋ก์ธ์ค๋ก, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์์ ํ๋ฏ์ด ๋ฐ์ดํฐ์ ์ค๋ณต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ๊ณผ ํ์ฉ์์ ์ ๋์ ์ผ๋ก ํผํด์ผ ํ๋ ๊ฒ ์ค ํ๋๋ค. ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํด ์ผ๋ จ์ ์์ ์ ๊ฑฐ์น๋ ๊ฒ์ ์ ๊ทํ ์์ ์ผ๋ก ์ดํดํ๋ฉด ์ข๊ฒ ๋ค. ์ ๊ทํ๋ ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ ํน์ ํ ์ด๋ธ ์์ฑ ์ ํ์ํ ์์ ์ผ๋ก, ๋ณ๋์ ํฌ์คํ ์์ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
๋ฐ๋์ ์ดํดํด์ผ ํ๋ ํต์ฌ ๋ด์ฉ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ SQL
- ํ ์ด๋ธ์ ๊ตฌ์กฐ: ํ๊ณผ ์ด, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋ฏธ
- "์ ๋" ์ค๋ณต๋๋ฉด ์ ๋๋ ๋ฐ์ดํฐ, ๊ทธ๋ฆฌ๊ณ ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํ ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ค
์ฌ๋ฏธ์๊ฒ ๋ณด์
จ๋ค๋ฉด ๊ณต๊ฐ ๋ฒํผ / ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์!
์ปจํ
์ธ ์์ฑ์ ํฐ ํ์ด ๋ฉ๋๋ค :)
'WORK > SQL 101' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL 101] ๋ฐ์ดํฐ ํ์ ๊ณผ ์ฐจ์/์ธก์ ๊ฐ (0) | 2023.03.14 |
---|---|
[SQL 101] SQL ๊ณต๋ถ๋ฅผ ์์ํ๊ธฐ ์ ์ (0) | 2023.03.05 |