์ด ํ๋ก์ ํธ์ ์ฒ์ ์์์ "์ฟ ํก"์ ๋ชจํฐ๋ธ๋ก ํ ํ๋ก์ ํธ์๊ณ , ๋ง์ฐํ ์ฟ ํก์ ๋ง์ ๊ธฐ๋ฅ์ ์ฐธ๊ณ ํด๋ณด์! ์๋ค.
์ ์ฟ ํก์ผ๋ก ์ก์๋๋ฉด, ์ ํ์ ์ธ ์คํ๋ง์ผ ํ๋ซํผ. ์ฆ, ์ฌ๋ฌ ํ๋งค์๊ฐ ์์ฃผ ๋ค์ํ ์ํ์ ์์ ๋กญ๊ฒ ํ๋งคํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
-> ํ์ฅ์ฑ์ด ๋งค์ฐ ์ค์ํ ์์ ์ด ๋ ๊ฒ ๊ฐ์๊ณ , ๊ทธ๋ก ์ธํด ์ ๊ฒฝ์จ์ผํ ๋ถ๋ถ์ ๊ณต๋ถํด๋ณด๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ด๋ค.
์, ์ด์ ๋ด๊ฐ ๋งก์ ์นดํ ๊ณ ๋ฆฌ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ํด ๊ธฐ๋กํด๋ณด๊ณ ์ ํ๋ค.
1. ์ฟ ํก ์นดํ ๊ณ ๋ฆฌ ์ดํด๋ณด๊ธฐ
A. ์ฟ ํก ์นดํ ๊ณ ๋ฆฌ ํน์ด์ 1. "ํจ์ ์๋ฅ/์กํ" ์นดํ ๊ณ ๋ฆฌ๋ ์ต์์ ๋์ค๊ฐ ์๋ ๊ฒ์ด๋ค.
ํฌ๋กค๋ง ํ ๋ ์ ์ฌํ ์ดํด๋ณด์๋๋ฐ ์ฟ ํก์ ์ ์ง ์ฒ์์ ํจ์ ์๋ฅ/์กํ ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋ฉ์ธ์ด์๋ ๊ฑฐ ๊ฐ๋ค.
๋ฐ๊ฟ ๋งํ์๋ฉด, ๊ฐ์ฅ ํฐ ๋๋ถ๋ฅ๊ฐ ์์ ์๋ ์ฌ์ฑํจ์ ,๋จ์ฑํจ์ ... ๋ถํฐ ์์์ด์๋๊ฑฐ ๊ฐ๋ค.
์๋ํ๋ฉด ํจ์ ์๋ฅ/์กํ๋ ์ฌ์ค์ ํ๋ฉด์๋ง ํ์ํด๋ ๊ฒฉ์ด์ง, ์ค์ ๋ก ๋๋น์ ์กด์ฌํ๋ ์ง๋ ์๋ฌธ์ธ ๋ชจ์ต์ด ๋ณด์ธ๋ค.
์ด๋ฐ์์ผ๋ก ์ฌ์ฑ ํจ์ ์ ๋ค์ด๊ฐ๋ณด๋ฉด ์ฟ ํก ํ > ์ฌ์ฑํจ์ ์ผ๋ก ๋ฐ๋ก ์ ๊ทผํ๋ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค.
F12๋ก ์ดํด๋ณด๋ ์นดํ ๊ณ ๋ฆฌ ์ฝ๋๋ ์กด์ฌํ์ง ์๋ ๋ฏํ๋ค.
์ฌํผ ๊ฐ์คํ๊ณ , ๊ทธ๋์ ๋ฐ์ดํฐ ์์ง๋ ๋ด๋นํ ๋๋ ์์งํ๊ธฐ ๋ฒ๊ฑฐ๋กญ์ง ์๊ฒ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ์๋ ์ด์ฐฝ๊ธฐ ์ฟ ํก ๋ชจ์ต(์ผ ๊ฒ์ด๋ผ ์ถ์ธก๋๋)๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํจ์ ์ชฝ์ ์ฌ์ฑํจ์ , ๋จ์ฑํจ์ .. ๋ฑ๋ฑ์ ๊ฐ์ฅ ์์ ๋์ค๋ก ์ก์๋ค.
B. ์ฟ ํก ์นดํ ๊ณ ๋ฆฌ ํน์ด์ 2. ์ตํ์ ์นดํ ๊ณ ๋ฆฌ ๊น์ด๊ฐ ์นดํ ๊ณ ๋ฆฌ ๋ณ๋ก ์ ๊ฐ๊ฐ์ด๋ค.
์ผ๋ก๋ก ์ฌ์ฑํจ์ > ๊ฐ๋ฐฉ/์กํ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ดํด๋ณด๋ฉด ๋ชจ์,๋๊ฑด,๊ท๋ง๊ฐ๋ 3๋์ค๊ฐ ์ตํ์์ธ๋ฐ, ๊ฐ๋ฐฉ, ์ฌํ๊ฐ๋ฐฉ/์ํ ๋ฑ๋ฑ์ ๊ทธ ์๋์ ๋์ค๊น์ง ์กด์ฌํ๋ ๊ฒ์ ์ ์๊ฐ ์๋ค.
๐๐ป ์ฌ๊ธฐ์๋ถํฐ ์นดํ ๊ณ ๋ฆฌ์ ํ์ฅ์ฑ์ ๊ณ ๋ คํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
2. ๋ง์ผ๋ธ๋ฆฟ์ง ์นดํ ๊ณ ๋ฆฌ ERD ์ค๊ณ - MySQL
๐ ์นดํ ๊ณ ๋ฆฌ ๊ตฌํ ์กฐ๊ฑด
1. ์ตํ์ ๋์ค๋ฅผ ์ถ๊ฐํ๋ ์ํฉ์ ๊ณ ๋ คํ ๊ฒ
2. ํ์ ๋์ค์ ์ ๋ณด๋ง ๊ฐ์ง๊ณ ๋ ์์ ๋์ค๋ค์ ์ ์ ์์ ๊ฒ
A. ๊ณ ๋ คํ ๋ฐฉ๋ฒ๋ก ํ๋ณด
1๏ธโฃ ๋๋ถ๋ฅ, ์ค๋ถ๋ฅ, ์๋ถ๋ฅ ๊ฐ๊ฐ ํ ์ด๋ธ์ ๋ง๋ ๋ค.
- ๊ฐ๊ฐ ํ ์ด๋ธ์ ๋ง๋ค์ด์, ๋>์ค>์ => ์ผ๋๋ค, ์ผ๋๋ค, ์ผ๋๋ค ๊ด๊ณ๋ก ๋ง๋ค์ด ๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
์ํ๊ณผ์ ๊ด๊ณ๋ ์ด๋ ๊ฒ ๊ฐ ์นดํ ๊ณ ๋ฆฌ์ id๊ฐ์ ํฌํจ์์ผ ๋๋ ๊ฒ.
* ์ฅ์ 1. ์ค๊ณ๊ฐ ๊ฐ๋จํ๋ค.
*ํ๊ณ์ 1. ์๋ถ๋ฅ ํ์ ๋์ค๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํ ์ด๋ธ์ ์ต์ข _์๋ถ๋ฅ ํ ์ด๋ธ, ์ต์ต์ข _์๋ถ๋ฅ ํ ์ด๋ธ .. ์ด๋ฐ ๊ณผ์ ์ด ์๊ธธ ๊ฒ์ด๋ค.
๋ฐ๋๋ก ์์ด์ง๋ค๋ฉด? -> ๋๋น ํ ์ด๋ธ์ ์ญ์ ํ๋ค๋ ๋๋ฌด ์์ฐํ๋ค
ํ๊ณ์ 2. ํ ์ด๋ธ ์ถ๊ฐ ๋ฟ๋ง์ด ์๋๋ผ product ํ ์ด๋ธ๋ ์์ ์ ํด์ผํ๋ค. ์ต์ข _์๋ถ๋ฅ ํ ์ด๋ธ id ์ถ๊ฐ ์ด๋ฐ์์ผ๋ก.. -> ๋งค์ฐ๋งค์ฐ ์ํ
2๏ธโฃ (์ต์ข ๊ฒฐ์ ) ๊ณ์ธตํ ์นดํ ๊ณ ๋ฆฌ ๊ตฌ์กฐ
์ค์ ์ ์ฉํ ERD์ ๋ชจ์ต์ด๋ค.
์ฝ๊ฒ ์๊ฐํ๋ฉด ์ด๋ฐ์์ ๊ตฌ์กฐ๊ฐ ๋๋ ๊ฒ์ด๋ค.
์ต์์ ์นดํ ๊ณ ๋ฆฌ์ ๋ถ๋ชจ id๋ null๊ฐ์ผ๋ก ์ธํ ํด๋์๋ค.
*์ฅ์ 1. ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ค. -> ์ ์ง๋ณด์๊ฐ ํธํด์ง๋ค.
*๋จ์ 1. ์ฌ๊ท์กฐํ๋ฅผ ํด์ผํ๋ฏ๋ก (๊ทธ๋ด ์ผ์ ์ ๊ฒ ์ง๋ง) ์นดํ ๊ณ ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ๋ฐฉ๋ํด์ง์๋ก ๋นํจ์จ์ ์ด๋ค.
*๋จ์ 2. ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๊ท์กฐํ๋ผ์ ์ํ๋ฐ์ดํฐ์ ์ฐ๊ด์ง์ด์ ์กฐํ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. -> ์ด ๋ถ๋ถ์ ์์ง๋ ๊ณ ๋ฏผ์ค์ด๋ค.
B. ์ฌ๊ท ์กฐํ SQL๋ฌธ
select c1.category_id as category_id,c2.category_id as parent_id,c1.level,c1.name from category c1
left join category c2 on c2.category_id=c1.parent_id and c1.category_id != c1.parent_id
-- where c1.parent_id = 1
order by c2.category_id asc, c1.category_id asc;
์กฐํํ ๋๋ left join์ ์ฌ์ฉํด์ ์ฌ๊ท์ ์ผ๋ก ์กฐํ๋ฅผ ํ๋ฉด ๋๋ค.
ํน์ ๋ถ๋ชจ์ ํ์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด where์ ์ ํ๋ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
*์ด๋ ค์ ๋ ์ 1. ์ค๋ผํด์ ๊ณ์ธต ๊ตฌ์กฐ์ผ ๋ ์ง์๋ฌธ์ด ๋ฐ๋ก ์กด์ฌํ๋๋ฐ, MySQL์๋ ์์ด์ ํ๋ ํ๋ ๋ง๋ค์ด์ค์ผํ๋ค.
์ค๋ผํด์์๋
START WITH
CONNECT BY PRIOR
ORDER SIBLINGS BY
์ด๋ฐ์์ผ๋ก ๊ณ์ธต๊ตฌ์กฐ ์ง์๋ฌธ์ ์กด์ฌํ๋ค.
์ ์ค๋ผํด ์์ฐ๊ณ MySQL์ ์ ํํด์ ์ด ๊ณ ์์ ํ๋ ๋ฌผ์ผ์ ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ๋ฐฐํฌ๊น์ง ํ ์์ ์ด์๊ธฐ ๋๋ฌธ์ ๋งํธํ ๋ฌด๋ฃ์ธ MySQL์ ํํ๋ค.
๊ฐ๋ํ ์ทจ์ค์์ ์ด์ฉ์๊ฐ ์๋คใ
์ด๋ฐ ๋ถํธ์ฏค์ ๊ฐ๋ดํด์ผ์ฅ..
๋ค์ ํฌ์คํ ์ ์ด์ ์ฝ๋ ๋จ์ผ๋ก ์ฌ๋ผ๊ฐ๋ณด๋๋ก ํ๊ฒ ๋ค.