MySQL ๊ฐ์ฒด - ์ธ๋ํค, CHECK
MySQL์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์งํค๊ธฐ ์ํ ๋ ๊ฐ์ง ์ค์ํ ๊ฐ์ฒด, ์ธ๋ํค(Foreign Key)์ CHECK ์ ์ฝ ์กฐ๊ฑด์ ๋ํด ์ฝ๊ฒ ์ค๋ช
ํด ๋๋ฆด๊ฒ์! ์ธ๋ํค๋ ํ
์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค์ ํด ๋ฐ์ดํฐ๊ฐ ๊ผฌ์ด์ง ์๋๋ก ๋์์ฃผ๊ณ , CHECK๋ ์ปฌ๋ผ์ ๋ค์ด๊ฐ๋ ๊ฐ์ด ์กฐ๊ฑด์ ๋ง๋๋ก ์ ํํด ์ค๋๋ค.
๋ชฉ์ฐจ
1.
2.
3.
4.
5.
6.
1. ์ธ๋ํค(Foreign Key)๋? [00:00:16]
โข
์ธ๋ํค๋ ํ ํ
์ด๋ธ์ ์ปฌ๋ผ์ด ๋ค๋ฅธ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํค(Primary Key)๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ๋งํด์.
โข
์๋ฅผ ๋ค์ด, ๊ฒ์ํ ํ
์ด๋ธ(A)์ ๊ธ ๋ฒํธ๊ฐ ๊ธฐ๋ณธ ํค๋ผ๋ฉด, ๋๊ธ ํ
์ด๋ธ(B)์ '๊ฒ์๊ธ ๋ฒํธ' ์ปฌ๋ผ์ด A ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ํค๊ฐ ๋ฉ๋๋ค.
โข
์ด๋ ๊ฒ ํ๋ฉด ๋๊ธ์ด ๋ฐ๋์ ์กด์ฌํ๋ ๊ฒ์๊ธ์๋ง ์ฐ๊ฒฐ๋๋๋ก ํ์ฌ ๋ฐ์ดํฐ์ **๋ฌด๊ฒฐ์ฑ(๊ฒฐํจ ์๋ ์ํ)**์ ๋ณด์ฅํด ์ค๋๋ค.
โข
๋ฌด๊ฒฐ์ฑ์ ์ฝ๊ฒ ๋งํด "๋ฐ์ดํฐ๊ฐ ์ ํํ๊ณ ์ผ๊ด๋ ์ํ"๋ฅผ ์๋ฏธํด์.
2. ์ธ๋ํค ์ต์
๊ณผ ๋์ ๋ฐฉ์ [00:06:54]
์ธ๋ํค์๋ ๋ถ๋ชจ ํ
์ด๋ธ(์ฐธ์กฐ๋๋ ํ
์ด๋ธ) ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ๋ ์์ ํ
์ด๋ธ(์ฐธ์กฐํ๋ ํ
์ด๋ธ)์ ์ด๋ป๊ฒ ์ํฅ์ ์ค์ง ์ ํ๋ ์ต์
๋ค์ด ์์ด์:
โข
CASCADE (์ฐ์์ ๋ณ๊ฒฝ)๋ถ๋ชจ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ์ญ์ ๋๋ฉด ์์ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ์์ /์ญ์ ๋ฉ๋๋ค.์: ๊ฒ์๊ธ ๋ฒํธ๊ฐ 100์์ 120์ผ๋ก ๋ฐ๋๋ฉด ๋๊ธ๋ 120์ผ๋ก ๋ฐ๋๊ณ , ๊ฒ์๊ธ์ด ์ญ์ ๋๋ฉด ๋๊ธ๋ ์ญ์ ๋จ.
โข
SET NULL๋ถ๋ชจ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ฉด ์์ ํ
์ด๋ธ์ ์ธ๋ํค ์ปฌ๋ผ ๊ฐ์ด NULL(๋น ๊ฐ)์ผ๋ก ๋ฐ๋๋๋ค.์: ๊ฒ์๊ธ ์ญ์ ์ ๋๊ธ์ ๋จ๊ธฐ๋ ๊ฒ์๊ธ ๋ฒํธ๋ ๋น์๋ .
โข
RESTRICT (์ ํ)์์ ํ
์ด๋ธ์ ์ฐธ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ถ๋ชจ ๋ฐ์ดํฐ ์ญ์ /์์ ์ ๋ง์ต๋๋ค.์: ๋๊ธ์ด ์๋ ๊ฒ์๊ธ์ ์ญ์ ๋ถ๊ฐ.
โข
NO ACTION์๋ฌด ๋์๋ ํ์ง ์๊ณ , ์ธ๋ํค ์ ์ฝ ์กฐ๊ฑด๋ง ์ ์งํฉ๋๋ค.
3. ์ธ๋ํค ์ค์ต ์์ : ๊ฒ์ํ๊ณผ ๋๊ธ ํ
์ด๋ธ [00:07:42]
โข
๊ฒ์ํ ํ
์ด๋ธ์ ๊ธ ๋ฒํธ(๊ธฐ๋ณธ ํค)๋ฅผ ๋ง๋ค๊ณ , ๋๊ธ ํ
์ด๋ธ์ '๋ณด๋ ์์ด๋'๋ผ๋ ์ธ๋ํค๋ฅผ ์ง์ ํด ๊ฒ์ํ ๊ธ ๋ฒํธ๋ฅผ ์ฐธ์กฐํ๋๋ก ์ค์ ํฉ๋๋ค.
โข
์ธ๋ํค ์ต์
์ ๋ฐ๊พธ๋ฉฐ ๋ฐ์ดํฐ ์์ , ์ญ์ ์ ๋๊ธ์ด ์ด๋ป๊ฒ ๋ณํ๋์ง ์ง์ ์ค์ตํด ๋ด
๋๋ค.
โข
์๋ฅผ ๋ค์ด, ๊ธ ๋ฒํธ๋ฅผ ๋ฐ๊พธ๋ฉด ๋๊ธ์ ์ฐธ์กฐ ๋ฒํธ๋ ๋ฐ๋๊ณ , ๊ธ์ ์ญ์ ํ๋ฉด ๋๊ธ๋ ๊ฐ์ด ์ญ์ ๋๊ฑฐ๋ ๋๋ก ๋ฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
4. CHECK ์ ์ฝ ์กฐ๊ฑด์ด๋? [00:29:39]
โข
CHECK ์ ์ฝ ์กฐ๊ฑด์ ์ปฌ๋ผ์ ๋ค์ด๊ฐ๋ ๊ฐ์ด ํน์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ๋ง ๋ฐ์ดํฐ๊ฐ ์
๋ ฅ๋๋๋ก ์ ํํ๋ ๊ธฐ๋ฅ์
๋๋ค.
โข
์: ๊ธ์ฌ ์ปฌ๋ผ์ ๋ง์ด๋์ค ๊ฐ์ด ๋ค์ด๊ฐ์ง ๋ชปํ๊ฒ ํ๊ฑฐ๋, ํ ์ธ ๊ฐ๊ฒฉ์ด ์๋ ๊ฐ๊ฒฉ๋ณด๋ค ํฌ์ง ์๋๋ก ์ ํํ ์ ์์ด์.
โข
์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ๊ท์น์ ๊ฐ์ ๋ก ์ง์ผ ๋ฐ์ดํฐ์ ์ ๋ขฐ๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
5. CHECK ์ ์ฝ ์กฐ๊ฑด ์ค์ต: ๊ฐ๊ฒฉ๊ณผ ํ ์ธ ์กฐ๊ฑด [00:32:07]
โข
์ํ ํ
์ด๋ธ์์ ๊ฐ๊ฒฉ์ด 0 ์ด์์ด์ด์ผ ํ๊ณ , ํ ์ธ ๊ฐ๊ฒฉ์ด ์๋ ๊ฐ๊ฒฉ๋ณด๋ค ์์์ผ ํ๋ค๋ ์กฐ๊ฑด์ CHECK๋ก ์ง์ ํด ๋ด
๋๋ค.
โข
๊ฐ๊ฒฉ์ ์์๋ ํ ์ธ ๊ฐ๊ฒฉ์ด ๋ ํฐ ๊ฐ์ ๋ฃ์ผ๋ ค ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํด ์
๋ ฅ์ด ๊ฑฐ๋ถ๋ฉ๋๋ค.
โข
์ ์์ ์ธ ๊ฐ๋ง ์
๋ ฅ์ด ๊ฐ๋ฅํด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ฃ .
6. ์ ์ฝ ์กฐ๊ฑด ์ญ์ ๋ฐฉ๋ฒ๊ณผ ์ฃผ์์ [00:38:09]
โข
์ด๋ฏธ ์ค์ ํ ์ธ๋ํค๋ CHECK ์ ์ฝ ์กฐ๊ฑด์ ์ญ์ ํ๋ ค๋ฉด ์ ์ฝ ์กฐ๊ฑด์ ์ด๋ฆ์ ์์์ผ ํฉ๋๋ค.
โข
์ํฌ๋ฒค์น ๊ฐ์ DB ๊ด๋ฆฌ ๋๊ตฌ์์ ์ ์ฝ ์กฐ๊ฑด ์ด๋ฆ์ ํ์ธํ๊ฑฐ๋, ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ง์ ์ฐพ์์ ์ญ์ ํ ์ ์์ด์.
โข
CHECK ์ ์ฝ ์กฐ๊ฑด์ MySQL ์ต์ ๋ฒ์ ์์ ์ง์๋๊ธฐ ์์ํด ๋๊ตฌ์์ ๋ฐ๋ก ๋ณด์ด์ง ์์ ์ ์์ผ๋ ์ฟผ๋ฆฌ ํ์ฉ์ด ํ์ํฉ๋๋ค.
๋ง๋ฌด๋ฆฌ ์์ฝ
์ด๋ฒ ์์์์๋ MySQL์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์งํค๋ย ์ธ๋ํค์ย CHECK ์ ์ฝ ์กฐ๊ฑด์ ๋ฐฐ์ ์ด์.
โข
์ธ๋ํค๋ ํ
์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ์ค์ ํด ๋ฐ์ดํฐ๊ฐ ๊ผฌ์ด์ง ์๋๋ก ๋๊ณ , ๋ค์ํ ์ต์
์ผ๋ก ์์ /์ญ์ ์ ์ฐ์์์ฉ์ ์ ์ดํฉ๋๋ค.
โข
CHECK ์ ์ฝ ์กฐ๊ฑด์ ์ปฌ๋ผ ๊ฐ์ด ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋๋ก ์ ํํด ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ์ ๋์
๋๋ค.์ด ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ ์์ ํ๊ณ ๊ฒฌ๊ณ ํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ต๋๋ค!
์์๊ณผ ํจ๊ป ์ง์ ์ค์ตํด ๋ณด๋ฉด์ ์ดํด๋ฅผ ํ์คํ ํด ๋ณด์ธ์! 