[์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค: ํ๋ณดํค
๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/42890
ํ๋ ์ฆ๋ํ๊ต ์ปดํจํฐ๊ณตํ๊ณผ ์กฐ๊ต์ธ ์ ์ด์ง๋ ๋ค์ค ํ๊ณผ์ฅ๋์ ์ง์๋ก, ํ์๋ค์ ์ธ์ ์ฌํญ์ ์ ๋ฆฌํ๋ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์๋ค.
๊ทธ์ ํ๋ถ ์์ ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ์ ๋์ด๋ ค, ๋ชจ๋ ์ธ์ ์ฌํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฃ๊ธฐ๋ก ํ์๊ณ , ์ด๋ฅผ ์ํด ์ ๋ฆฌ๋ฅผ ํ๋ ์ค์ ํ๋ณดํค(Candidate Key)์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๊ฒ ๋์๋ค.
ํ๋ณดํค์ ๋ํ ๋ด์ฉ์ด ์ ๊ธฐ์ต๋์ง ์๋ ์ ์ด์ง๋, ์ ํํ ๋ด์ฉ์ ํ์ ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์์ ์ ํ์ธํ์ฌ ์๋์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ์๋ค.
- ๊ด๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฆด๋ ์ด์
(Relation)์ ํํ(Tuple)์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ์์ฑ(Attribute) ๋๋ ์์ฑ์ ์งํฉ ์ค, ๋ค์ ๋ ์ฑ์ง์ ๋ง์กฑํ๋ ๊ฒ์ ํ๋ณด ํค(Candidate Key)๋ผ๊ณ ํ๋ค.
- ์ ์ผ์ฑ(uniqueness) : ๋ฆด๋ ์ด์ ์ ์๋ ๋ชจ๋ ํํ์ ๋ํด ์ ์ผํ๊ฒ ์๋ณ๋์ด์ผ ํ๋ค.
- ์ต์์ฑ(minimality) : ์ ์ผ์ฑ์ ๊ฐ์ง ํค๋ฅผ ๊ตฌ์ฑํ๋ ์์ฑ(Attribute) ์ค ํ๋๋ผ๋ ์ ์ธํ๋ ๊ฒฝ์ฐ ์ ์ผ์ฑ์ด ๊นจ์ง๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ๋ฆด๋ ์ด์ ์ ๋ชจ๋ ํํ์ ์ ์ผํ๊ฒ ์๋ณํ๋ ๋ฐ ๊ผญ ํ์ํ ์์ฑ๋ค๋ก๋ง ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
์ ์ด์ง๋ฅผ ์ํด, ์๋์ ๊ฐ์ ํ์๋ค์ ์ธ์ ์ฌํญ์ด ์ฃผ์ด์ก์ ๋, ํ๋ณด ํค์ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ผ.
์์ ์๋ฅผ ์ค๋ช ํ๋ฉด, ํ์์ ์ธ์ ์ฌํญ ๋ฆด๋ ์ด์ ์์ ๋ชจ๋ ํ์์ ๊ฐ์ ์ ์ผํ "ํ๋ฒ"์ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์ "ํ๋ฒ"์ ๋ฆด๋ ์ด์ ์ ํ๋ณด ํค๊ฐ ๋ ์ ์๋ค.
๊ทธ๋ค์ "์ด๋ฆ"์ ๋ํด์๋ ๊ฐ์ ์ด๋ฆ("apeach")์ ์ฌ์ฉํ๋ ํ์์ด ์๊ธฐ ๋๋ฌธ์, "์ด๋ฆ"์ ํ๋ณด ํค๊ฐ ๋ ์ ์๋ค. ๊ทธ๋ฌ๋, ๋ง์ฝ ["์ด๋ฆ", "์ ๊ณต"]์ ํจ๊ป ์ฌ์ฉํ๋ค๋ฉด ๋ฆด๋ ์ด์
์ ๋ชจ๋ ํํ์ ์ ์ผํ๊ฒ ์๋ณ ๊ฐ๋ฅํ๋ฏ๋ก ํ๋ณด ํค๊ฐ ๋ ์ ์๊ฒ ๋๋ค.
๋ฌผ๋ก ["์ด๋ฆ", "์ ๊ณต", "ํ๋
"]์ ํจ๊ป ์ฌ์ฉํด๋ ๋ฆด๋ ์ด์
์ ๋ชจ๋ ํํ์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์์ง๋ง, ์ต์์ฑ์ ๋ง์กฑํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ํ๋ณด ํค๊ฐ ๋ ์ ์๋ค.
๋ฐ๋ผ์, ์์ ํ์ ์ธ์ ์ฌํญ์ ํ๋ณดํค๋ "ํ๋ฒ", ["์ด๋ฆ", "์ ๊ณต"] ๋ ๊ฐ๊ฐ ๋๋ค.
๋ฆด๋ ์ด์ ์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด relation์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด ๋ฆด๋ ์ด์ ์์ ํ๋ณด ํค์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ๋ผ.
์ ํ์ฌํญ
- relation์ 2์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด์ด๋ค.
- relation์ ์ปฌ๋ผ(column)์ ๊ธธ์ด๋ 1 ์ด์ 8 ์ดํ์ด๋ฉฐ, ๊ฐ๊ฐ์ ์ปฌ๋ผ์ ๋ฆด๋ ์ด์ ์ ์์ฑ์ ๋ํ๋ธ๋ค.
- relation์ ๋ก์ฐ(row)์ ๊ธธ์ด๋ 1 ์ด์ 20 ์ดํ์ด๋ฉฐ, ๊ฐ๊ฐ์ ๋ก์ฐ๋ ๋ฆด๋ ์ด์ ์ ํํ์ ๋ํ๋ธ๋ค.
- relation์ ๋ชจ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ 1 ์ด์ 8 ์ดํ์ด๋ฉฐ, ์ํ๋ฒณ ์๋ฌธ์์ ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
- relation์ ๋ชจ๋ ํํ์ ์ ์ผํ๊ฒ ์๋ณ ๊ฐ๋ฅํ๋ค.(์ฆ, ์ค๋ณต๋๋ ํํ์ ์๋ค.)
ํ์ด
์ด ๋ฌธ์ ๋ ๊ฒฐ๊ตญ ์ ์ผ์ฑ, ์ต์์ฑ์ ํ๋จํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋๋ ๋ฌธ์ ์ ๋๋ค.
๋จผ์ ์ฃผ์ด์ง๋ ์ปฌ๋ผ๋ค์ ์กฐํฉ์ ๋ชจ๋ ๊ตฌํด์ผ ํฉ๋๋ค. ์์์ฒ๋ผ ํ๋ฒ, ์ด๋ฆ, ์ ๊ณต, ํ๋ ์ปฌ๋ผ์ด ์๋ค๋ฉด ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ๋จผ์ ๊ตฌํฉ๋๋ค. ์ด๋ ๊ฒ ๊ตฌํด์ง๋ ์กฐํฉ๋ค์ ์งํฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ํ๋ฒ}, {ํ๋ฒ, ์ด๋ฆ}, {ํ๋ฒ, ์ ๊ณต}, {ํ๋ฒ, ํ๋ }, {์ด๋ฆ, ์ ๊ณต}, {์ด๋ฆ, ํ๋ }, {์ ๊ณต, ํ๋ }, {ํ๋ฒ, ์ด๋ฆ, ์ ๊ณต}, {ํ๋ฒ, ์ ๊ณต, ํ๋ }, {์ด๋ฆ, ์ ๊ณต, ํ๋ }, {ํ๋ฒ, ์ด๋ฆ, ์ ๊ณต, ํ๋ }
์ด์ ์ด ์ปฌ๋ผ ์กฐํฉ๋ค์ ๋ํด ์ ์ผ์ฑ๊ณผ ์ต์์ฑ์ ๋ง์กฑํ๋์ง ํ์ธํด์ฃผ๋ ๊ฒ์ผ๋ก ํ๋ณดํค์ธ์ง ์ฌ๋ถ๋ฅผ ์์๋ผ ์ ์์ต๋๋ค.
์ ์ผ์ฑ์ ํ๋จํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋จ์ํ ํด๋น ์ปฌ๋ผ์ ๊ฐ๋ค ์ค ์ค๋ณต๋๋ ๊ฐ์ด ์๋์ง ํ์ธํ๋ ๊ฒ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ํ ์ด๋ธ์ ๊ฐ ํ์ ๋ชจ๋ ๋๋ฉด์ ์ปฌ๋ผ์ ๊ฐ๋ค์ ํ๋์ ๋ฌธ์์ด๋ก ๋ง๋ค์ด Set์ ์ง์ด๋ฃ๊ณ , ์ด๋ฏธ Set์ ๊ฐ์ ๊ฐ์ด ์กด์ฌํ๋ฉด ์ค๋ณต๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ํ์ด ์กด์ฌํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ์ ์ผ์ฑ์ ๋ง์กฑํ์ง ๋ชปํ๋ค๊ณ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์์์์ {์ ๊ณต, ํ๋ } ์ปฌ๋ผ์ ๋ํด ์ ์ผ์ฑ์ ํ๋จํ๋ ค๋ฉด ๊ฐ ํ์ ๋ ์ปฌ๋ผ ๊ฐ๋ค์ ํ๋์ ๋ฌธ์์ด๋ก ํฉ์ณ Set์ ๋ฃ์ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด Set์ด ์์ฐจ์ ์ผ๋ก ์ฑ์์ง๋๋ค.
{music2, math2, computer2, computer1, music3}
์ด๋ ๋ง์ง๋ง ํ์ ๋ฐ์ดํฐ๊ฐ music2์ธ๋ฐ, ์ด๋ฏธ Set์๋ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฏ๋ก ์ด ์ปฌ๋ผ ์กฐํฉ์ ์ ์ผ์ฑ์ ๋ง์กฑํ์ง ๋ชปํ๋ ์กฐํฉ์ผ๋ก ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค.
์ ์ผ์ฑ์ด ํ์ธ๋์๋ค๋ฉด, ์ด์ ์ต์์ฑ์ ํ์ธํด์ผํฉ๋๋ค. ์ต์์ฑ์ด ๋ง์กฑ๋๋ ค๋ฉด ์ปฌ๋ผ ์กฐํฉ์ ์์๋ค ์ค ์ผ๋ถ๋ง ์ฌ์ฉํ์ ๋ ์ ์ผ์ฑ์ด ์ ๋ ๋ง์กฑ๋์ด์๋ ์๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ผ์ฑ์ด ํ์ธ๋ ์กฐํฉ์ ๊ธฐ์ค์ผ๋ก ๋ค์ ๋ชจ๋ ์ปฌ๋ผ๋ค์ ์กฐํฉ์ ์์ฑํ์ฌ ์ ์ผ์ฑ์ด ๋ง์กฑ๋๋์ง ํ์ธํด๋ณด๋ ๊ฒ์ผ๋ก ์ต์์ฑ์ ํ๋จํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์์์์ {์ด๋ฆ, ์ ๊ณต, ํ๋ } ์กฐํฉ์ ์ ์ผ์ฑ์ ๋จผ์ ๊ฒ์ฌํด๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ์ด Set์ ๊ตฌ์ฑํ๊ฒ ๋๊ณ ์ ์ผ์ฑ์ด ๋ง์กฑ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
{ryanmusic2, apeachmath2, tubecomputer3, concomputer1, muzimusic3, apeachmusic2}
์ด์ ์ต์์ฑ์ ํ์ธํ๊ธฐ ์ํด ์ ์ปฌ๋ผ์กฐํฉ์ ์์๋ค์ ๋ฝ์ ๋ค์ ์ปฌ๋ผ ์กฐํฉ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. {์ด๋ฆ, ์ ๊ณต, ํ๋ }์์ ์ป์ ์ ์๋ ์กฐํฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{์ด๋ฆ}, {์ด๋ฆ, ์ ๊ณต}, {์ด๋ฆ, ํ๋ }, {์ ๊ณต, ํ๋ }, {์ด๋ฆ, ์ ๊ณต, ํ๋ }
๊ฐ ์ปฌ๋ผ ์กฐํฉ์ ๋ํด ์ ์ผ์ฑ์ ํ์ธํด๋ณด๋ฉด, {์ด๋ฆ, ์ ๊ณต}๋ง์ผ๋ก๋ ์ ์ผ์ฑ์ ๋ณด์ฅ๋จ์ ์๊ฒ๋ฉ๋๋ค.
{ryanmusic, apeachmath, tubecomputer, concomputer, muzimusic, apeachmusic}
๋ฐ๋ผ์, {์ด๋ฆ, ์ ๊ณต, ํ๋ } ์กฐํฉ์ ์ ์ผ์ฑ์ ๋ง์กฑ์ํค์ง๋ง ์ต์์ฑ์ ๋ง์กฑ์ํค์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ํ๋ณดํค๊ฐ ๋ ์ ์์์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ฐ๋ฐฉ์์ผ๋ก ์ ์ผ์ฑ์ด ๋ง์กฑ๋๋ ์ปฌ๋ผ์กฐํฉ์ผ๋ก ๋ชจ๋ ์กฐํฉ์ ๋ง๋ค์ด ๋ชจ๋ ์๋ธ์ปฌ๋ผ์กฐํฉ๋ค์ด ์ ์ผ์ฑ์ ๋ง์กฑ์ํค์ง ์๋๋ค๋ฉด ํด๋น ์ปฌ๋ผ์กฐํฉ์ ํ๋ณดํค๋ก ํ๋จํ๊ณ ์ ๋ต์ ์ถ๊ฐํด์ค ์ ์์ต๋๋ค.
์ฝ๋
'๐๐ปโโ๏ธ ํผ-์์ค > ๐ฃ ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote