๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

์ด์ƒ ํ˜„์ƒ(Anomaly)

Anomaly๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์•ˆ์—์„œ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ์ด์ƒ ํ˜„์ƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Anomaly๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . Anomaly์˜ ์ข…๋ฅ˜์™€ ๊ทธ ์œ„ํ—˜์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Deletion Anomaly (์‚ญ์ œ ์ด์ƒ)

์‚ญ์ œ ์ด์ƒ์€ ํ…Œ์ด๋ธ”์—์„œ ์–ด๋–ค ๊ฐ’์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ํŠœํ”Œ์„ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ํŠœํ”Œ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํ•จ๊ป˜ ์‚ญ์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

student_id student_name department course_id grade
1 ์—ฌํ›ˆ ์ „์ „ 1 A+
1 ์—ฌํ›ˆ ์ „์ „ 2 A+
1 ์—ฌํ›ˆ ์ „์ „ 3 A+
2 ์œค์ด ์ƒ์‚ฌ 3 A+

์œค์ด๊ฐ€ course_id ๊ฐ€ 3์ธ ์ˆ˜์—…์„ ์ฒ ํšŒํ–ˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. ๊ทน๋‹จ์ ์ด์ง€๋งŒ ์œ„ ํ…Œ์ด๋ธ”์—์„œ๋Š” ์œค์ด๊ฐ€ ๋“ค์€ ๊ณผ๋ชฉ์ด 3๋ฒˆ ๊ณผ๋ชฉ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ, ์˜๋„ํ•œ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์œค์ด์˜ ์ •๋ณด๊ฐ€ ํ†ต์งธ๋กœ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์œค์ด๊ฐ€ 3๋ฒˆ ๊ณผ๋ชฉ์„ ๋“ฃ์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ธฐ๋กํ•˜๊ณ  ์‹ถ์„ ๋ฟ์ธ๋ฐ, ์œค์ด๋ผ๋Š” ํ•™์ƒ์ด ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ๋ผ์ ธ ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํ˜„์ƒ์ด ์‚ญ์ œ ์ด์ƒ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Insertion Anomaly (์‚ฝ์ž… ์ด์ƒ)

์‚ฝ์ž… ์ด์ƒ์€ ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด tuple์„ ์‚ฝ์ž…ํ•  ๋•Œ, ํŠน์ • ์†์„ฑ์˜ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์•„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ null ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋ฉด์„œ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

student_id student_name department course_id grade
1 ์—ฌํ›ˆ ์ „์ „ 1 A+
1 ์—ฌํ›ˆ ์ „์ „ 2 A+
1 ์—ฌํ›ˆ ์ „์ „ 3 A+
2 ์œค์ด ์ƒ์‚ฌ 3 A+
3 ํ˜„๊ธฐ null null null

์‚ญ์ œ ์ด์ƒ๊ณผ ๋˜‘๊ฐ™์€ ํ‘œ์— ์ƒˆ๋กœ์šด ํ•™์ƒ์ธ "ํ˜„๊ธฐ"๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ํ˜„๊ธฐ๋Š” ์ด์ œ ๋ง‰ ์ž…ํ•™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, id์™€ ์ด๋ฆ„๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ๋ชจ๋“  ์ •๋ณด๋Š” ์•Œ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ null ๊ฐ’์„ ํ•จ๊ป˜ ์‚ฝ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Update Anomaly (๊ฐฑ์‹  ์ด์ƒ)

๊ฐฑ์‹  ์ด์ƒ์€ ์–ด๋–ค ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ, ๊ทธ์— ๋Œ€์‘๋˜๋Š” ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

student_id student_name department course_id grade
1 ์—ฌํ›ˆ ์ „์ „ ? 1 A+
1 ์—ฌํ›ˆ ์ƒ์‚ฌ ? 2 A+
1 ์—ฌํ›ˆ ์ „์ „ ? 3 A+
2 ์œค์ด ์ƒ์‚ฌ 3 A+
3 ํ˜„๊ธฐ null null null

์—ฌํ›ˆ์ด๊ฐ€ ์ƒ์‚ฌ๋กœ ์ „๊ณต์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ์ด ๊ณผ์ •์—์„œ course_id 2์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ ๋ณด์•˜์„ ๋•Œ ์—ฌํ›ˆ์ด๋Š” ์–ด๋–ค ์ „๊ณต ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด์•ผ ํ• ๊นŒ์š”? ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  "์—ฌํ›ˆ"์ด๋ผ๋Š” ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ํŠœํ”Œ์„ ์ฐพ์•„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ์œ„ ํ…Œ์ด๋ธ”์—์„œ๋Š” ํŠœํ”Œ์ด ์„ธ ๊ฐœ๋ฟ์ด๋‹ˆ ์‰ฌ์šด ์ž‘์—…์ด๊ฒ ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํฐ ๊ฒฝ์šฐ์—๋Š” ์—„์ฒญ๋‚œ ์ž์›๊ณผ ์‹œ๊ฐ„์˜ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ด์ƒ ํ˜„์ƒ์„ ๊ฐฑ์‹  ์ด์ƒ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์  ์ข…์†(Functional Dependency)

Functional Dependency๋Š” ํ•œ๊ธ€๋กœ ํ•จ์ˆ˜์  ์ข…์†์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค X๊ฐ€ Y๋ฅผ ํ•จ์ˆ˜์ ์œผ๋กœ ๊ฒฐ์ •ํ•  ๋•Œ, ์šฐ๋ฆฌ๋Š” X๋ฅผ ๊ฒฐ์ •์ž, Y๋ฅผ ์ข…์†์ž์ข…์†์ž๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ , ์ˆ˜ํ•™์  ํ‘œ๊ธฐ๋กœ X -> Y๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™์ ์ธ ๊ฐœ๋…์œผ๋กœ๋Š” ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฌ๋‹ˆ ๋””๋น„ ํ…Œ์ด๋ธ”๋กœ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

student_id student_name department course_id grade
1 ์—ฌํ›ˆ ์ „์ „ ? 1 A+
1 ์—ฌํ›ˆ ์ƒ์‚ฌ ? 2 A+
1 ์—ฌํ›ˆ ์ „์ „ ? 3 A+
2 ์œค์ด ์ƒ์‚ฌ 3 A+

์œ„์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ํ…Œ์ด๋ธ”์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์†์„ฑ์˜ ์ง‘ํ•ฉ X๊ฐ€ ํŠน์ •ํ•œ tuple์„ ์‹๋ณ„ํ•˜๊ฒŒ ํ•œ๋‹ค๋ฉด, ํ•จ์ˆ˜์  ์ข…์†์„ฑ ๊ด€๊ณ„์— ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ…Œ์ด๋ธ”์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ student_name, course_id ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ๋‚˜๋จธ์ง€ ์ •๋ณด๋“ค์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•™๋ฒˆ์„ ์•Œ๋ฉด ํ•™์ƒ์˜ ์ด๋ฆ„๋„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ํ…Œ์ด๋ธ”์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ด€๊ณ„๋“ค๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • {student_id, course_id} -> department
  • {student_id, course_id} -> student_name
  • {student_id, course_id} -> grade
  • {student_id} -> student_name

์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์€ ํ•œ ํ…Œ์ด๋ธ” ์•ˆ์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ฐœ ๋ฐœ๊ฒฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€๋ถ„์  ํ•จ์ˆ˜์  ์ข…์†(Partial Functional Dependency)

๋ถ€๋ถ„ ํ•จ์ˆ˜์  ์ข…์†์€ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์„ ๋งŒ๋“œ๋Š” ์†์„ฑ์˜ ์ง‘ํ•ฉ ์ค‘ ์ผ๋ถ€๊ฐ€ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด student_name ์€ ๋‘ ์†์„ฑ์˜ ์ง‘ํ•ฉ์ธ {student_id, course_id}์— ์ข…์†๋˜์ง€๋งŒ ๋™์‹œ์—, ํ•ด๋‹น ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ธ {student_id}์— ๋Œ€ํ•ด์„œ๋„ ์ข…์†๋˜๋Š” ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ฆ‰, ์œ„์—์„œ ๋‚˜์—ดํ•œ ํ•จ์ˆ˜์  ์ข…์†์„ฑ ์ค‘ 2๋ฒˆ๊ณผ 4๋ฒˆ์˜ ๊ฒฝ์šฐ๊ฐ€ ๋™์‹œ์— ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฒฐ์ •์ž์˜ ์ผ๋ถ€์—๋„ ์ข…์†์ž๊ฐ€ ๋˜๋Š” ๊ด€๊ณ„๋ฅผ ๋ถ€๋ถ„์  ํ•จ์ˆ˜์  ์ข…์†์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.