Post

๐Ÿ“Ÿ SQL & Database (04) - ์ •๊ทœํ˜•, ์ •๊ทœํ™” (1NF, 2NF, 3NF)



ํ•™์Šตํ™˜๊ฒฝ : Windows, MariaDB, DBeaver

์ •์ฒ˜๊ธฐ ๊ณต๋ถ€ํ•  ๋•Œ ๋ƒ…๋‹ค ์™ธ์› ๋˜ ๋„๋ถ€์ด๊ฒฐ๋‹ค์กฐโ€ฆ.
์ž์„ธํžˆ ์•Œ์•„๋ณด์ž

์ œ1์ •๊ทœํ˜• (1NF, 1st normal form)

: ํ•˜๋‚˜์˜ ์…€ ์•ˆ์—๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ.

์ œ1์ •๊ทœํ™”๋Š” ๊ฐ ์ปฌ๋Ÿผ์ด ์›์ž๊ฐ’์„ ๊ฐ–๋„๋ก ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค

  • ์ œ1์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „

[์ฃผ๋ฌธ ํ…Œ์ด๋ธ”]

์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ณ ๊ฐ๋ช…์ฃผ๋ฌธ์ƒํ’ˆ
1ํ™๊ธธ๋™์ปดํ“จํ„ฐ, ๋งˆ์šฐ์Šค
2๊น€์ฒ ์ˆ˜ํ‚ค๋ณด๋“œ
3์ด์˜ํฌํ‚ค๋ณด๋“œ

์ฃผ๋ฌธ์ƒํ’ˆ ์ปฌ๋Ÿผ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ƒํ’ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ.
์ €๋Ÿฐ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ํ•œ ์นธ์—์„œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ฐพ์„ ๋•Œ ๋‹จ์ˆœํ•œ WHERE์ ˆ ๋Œ€์‹  LIKE๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ฑฐ๋‚˜,,
์„ฑ๋Šฅ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Œ
ํ•œ์นธ์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋“ค์–ด๊ฐ€๋„๋ก ๋ถ„๋ฆฌํ•˜๋Š” ์ž‘์—…์ด ์ œ1์ •๊ทœํ™”

  • ์ œ1์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•œ ํ›„

๋ณ„๋„์˜ ํ–‰์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ „ํ™”๋ฒˆํ˜ธ ์ปฌ๋Ÿผ์„ ์›์ž๊ฐ’์œผ๋กœ ๋งŒ๋“ ๋‹ค.

์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ณ ๊ฐ๋ช…์ƒํ’ˆ
1ํ™๊ธธ๋™์ปดํ“จํ„ฐ
1ํ™๊ธธ๋™๋งˆ์šฐ์Šค
2๊น€์ฒ ์ˆ˜ํ‚ค๋ณด๋“œ
3์ด์˜ํฌํ‚ค๋ณด๋“œ

์ด ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ…Œ์ด๋ธ”์„ ์ œ1์ •๊ทœํ˜•์ด๋ผ๊ณ  ํ•จ

์ œ2์ •๊ทœํ˜• (2NF, 2nd normal form)

: ํ˜„์žฌ ํ…Œ์ด๋ธ”์˜ ์ฃผ์ œ์™€ ๊ด€๋ จ์—†๋Š” ์ปฌ๋Ÿผ์€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ.

์ œ1์ •๊ทœํ™”(1NF)๋ฅผ ๋งŒ์กฑํ•˜๋ฉด์„œ ๋ถ€๋ถ„ ํ•จ์ˆ˜์  ์ข…์†์„ฑ(partial dependency)์„ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค

์•„๊นŒ ์ œ1์ •๊ทœํ™”๋ฅผ ๋งŒ์กฑํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ ํ…Œ์ด๋ธ”์— โ€˜๊ฐ€๊ฒฉโ€™์ด๋ผ๋Š” ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์„œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค

  • ์ œ2์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „

[์ฃผ๋ฌธ ํ…Œ์ด๋ธ”]

์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ณ ๊ฐ๋ช…์ƒํ’ˆ๊ฐ€๊ฒฉ
1ํ™๊ธธ๋™์ปดํ“จํ„ฐ1,500,000
1ํ™๊ธธ๋™๋งˆ์šฐ์Šค50,000
2๊น€์ฒ ์ˆ˜ํ‚ค๋ณด๋“œ100,000
3์ด์˜ํฌํ‚ค๋ณด๋“œ100,000

์ƒํ’ˆ์— ๋Œ€ํ•œ ๊ฐ€๊ฒฉ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ํ‚ค๋ณด๋“œ์˜ ๊ฐ€๊ฒฉ์ด ๋ณ€๊ฒฝ๋˜๋ฉด?
-> 2๊ฐœ ํ–‰์„ ๊ฐ๊ฐ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ‚ค๋ณด๋“œ๋ฅผ ์ฃผ๋ฌธํ•œ ์‚ฌ๋žŒ์ด 100๋ช…์ด๋ผ๋ฉด?
100๊ฐœ์˜ ํ–‰์„ ๋‹ค ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๊ฒ ์ง€โ€ฆ
๊ทธ๋Ÿฐ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€๊ฒฉ ์ปฌ๋Ÿผ์„ ์ž˜๋ผ๋‚ด์–ด ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌ์‹œํ‚ค์ž

  • ์ œ2์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•œ ํ›„

[์ฃผ๋ฌธ ํ…Œ์ด๋ธ”]

์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ณ ๊ฐ๋ช…์ƒํ’ˆ
1ํ™๊ธธ๋™์ปดํ“จํ„ฐ
1ํ™๊ธธ๋™๋งˆ์šฐ์Šค
2๊น€์ฒ ์ˆ˜ํ‚ค๋ณด๋“œ
3์ด์˜ํฌํ‚ค๋ณด๋“œ

[์ƒํ’ˆ ํ…Œ์ด๋ธ”]

์ƒํ’ˆ๊ฐ€๊ฒฉ
์ปดํ“จํ„ฐ1,500,000
๋งˆ์šฐ์Šค50,000
ํ‚ค๋ณด๋“œ100,000

์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌํ•˜์˜€๋‹ค
์ด ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ…Œ์ด๋ธ”์„ ์ œ2์ •๊ทœํ˜•์ด๋ผ๊ณ  ํ•จ

primary key๋Š” ํ–‰์„ ์„œ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ๋‹ˆํฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ์ปฌ๋Ÿผ์ด๋‹ค
๊ทผ๋ฐ ๊ฐ€๋”์€ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ๋งŒ์œผ๋กœ primary key๋ฅผ ์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
๋‘๊ฐœ ์ปฌ๋Ÿผ์„ ํ•ฉ์นœ primary key๋ฅผ composite primary key ๋ผ๊ณ  ํ•จ

๊ทธ๋ฆฌ๊ณ  composite primary key ์ค‘์— ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์—๋งŒ ์ข…์†๋˜์–ด ์žˆ๋Š” ์ปฌ๋Ÿผ์„ partial dependency(๋ถ€๋ถ„ ํ•จ์ˆ˜์  ์ข…์†)๊ฐ€ ์žˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ข€์ „์˜ ์ œ2์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „ ํ…Œ์ด๋ธ”์—์„œ

  • composite primary key ย : ย โ€˜์ฃผ๋ฌธ๋ฒˆํ˜ธโ€™์™€ โ€˜์ƒํ’ˆโ€™์„ ํ•ฉ์นœ ๊ฒƒ
  • โ€˜๊ฐ€๊ฒฉโ€™ ์ปฌ๋Ÿผ ย :ย โ€˜์ƒํ’ˆโ€™์— ๋”ฐ๋ผ ๊ฒฐ์ •๋จ. โ€˜์ฃผ๋ฌธ๋ฒˆํ˜ธโ€™์™€๋Š” ์ƒ๊ด€X
    => ย โ€˜๊ฐ€๊ฒฉโ€™ ์ปฌ๋Ÿผ์€ partial dependency๊ฐ€ ์žˆ๋‹ค๊ณ  ํ‘œํ˜„

๊ทธ๋ž˜์„œ ์ด partial dependency๊ฐ€ ์žˆ๋Š” โ€˜๊ฐ€๊ฒฉโ€™ ์ปฌ๋Ÿผ์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ ๋นผ๋ฉด ์ œ2์ •๊ทœํ˜• ํ…Œ์ด๋ธ”์ด ๋œ๋‹ค!

์ œ3์ •๊ทœํ˜• (3NF, 3rd normal form)

: ์ผ๋ฐ˜ ์ปฌ๋Ÿผ์— ์ข…์†๋œ ์ปฌ๋Ÿผ์€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ.

์•„๊นŒ ์ œ2์ •๊ทœํ™”๋ฅผ ๋งŒ์กฑํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์— โ€˜์นดํ…Œ๊ณ ๋ฆฌโ€™ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์„œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค

  • ์ œ3์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „

[์ฃผ๋ฌธ ํ…Œ์ด๋ธ”]

์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ณ ๊ฐ๋ช…์ƒํ’ˆ์นดํ…Œ๊ณ ๋ฆฌ
1ํ™๊ธธ๋™์ปดํ“จํ„ฐ์ „์ž์ œํ’ˆ
1ํ™๊ธธ๋™๋งˆ์šฐ์Šค์ฃผ๋ณ€๊ธฐ๊ธฐ
2๊น€์ฒ ์ˆ˜ํ‚ค๋ณด๋“œ์ฃผ๋ณ€๊ธฐ๊ธฐ
3์ด์˜ํฌํ‚ค๋ณด๋“œ์ฃผ๋ณ€๊ธฐ๊ธฐ

์ฃผ๋ฌธ๋ฒˆํ˜ธ์™€ ๊ณ ๊ฐ๋ช…์„ composite primary key๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ๋ฌธํ…Œ์ด๋ธ”์—์„œ ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์ผ๋ฐ˜ ์ปฌ๋Ÿผ์ธ ์ƒํ’ˆ์—๋งŒ ๊ด€๋ จ์ด ์žˆ์Œ
์ฆ‰, โ€˜์ƒํ’ˆโ€™์€ โ€˜์ฃผ๋ฌธ๋ฒˆํ˜ธโ€™์™€ โ€˜๊ณ ๊ฐ๋ช…โ€™์— ์ข…์†๋˜์–ด ์žˆ๋Š”๋ฐ โ€˜์นดํ…Œ๊ณ ๋ฆฌโ€™๋Š” โ€˜์ƒํ’ˆโ€™์— ์ข…์†๋˜์–ด์žˆ๋‹ค
์ด๊ฑธ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ

  • ์ œ3์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•œ ํ›„

[์ฃผ๋ฌธ ํ…Œ์ด๋ธ”]

์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ณ ๊ฐ๋ช…์ƒํ’ˆ
1ํ™๊ธธ๋™์ปดํ“จํ„ฐ
1ํ™๊ธธ๋™๋งˆ์šฐ์Šค
2๊น€์ฒ ์ˆ˜ํ‚ค๋ณด๋“œ
3์ด์˜ํฌํ‚ค๋ณด๋“œ

[์ƒํ’ˆ ํ…Œ์ด๋ธ”]

์ƒํ’ˆ์นดํ…Œ๊ณ ๋ฆฌ
์ปดํ“จํ„ฐ์ „์ž์ œํ’ˆ
๋งˆ์šฐ์Šค์ฃผ๋ณ€๊ธฐ๊ธฐ
ํ‚ค๋ณด๋“œ์ฃผ๋ณ€๊ธฐ๊ธฐ

์ด ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ…Œ์ด๋ธ”์„ ์ œ3์ •๊ทœํ˜•์ด๋ผ๊ณ  ํ•จ

์ด๋ ‡๊ฒŒ ์ฐข์–ด๋†“์€ ํ…Œ์ด๋ธ”๋“ค์„ ๊ฐ™์ด ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด?
JOIN์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค
JOIN ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ ๊ธ€์—์„œ ~

This post is licensed under CC BY 4.0 by the author.