Post

[DB Theory] Normalization

[DB Theory] Normalization

๐Ÿงฉ Relation

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์˜ ์—ฌ์ •์€ ๋ฆด๋ ˆ์ด์…˜(Relation)์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ •ํ™•ํžˆ ํ•ด๋ถ€ํ•˜๋Š” ๊ฒƒ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ”ํžˆ ์‹ค๋ฌด์—์„œ โ€˜ํ…Œ์ด๋ธ”โ€™๊ณผ โ€˜๋ฆด๋ ˆ์ด์…˜โ€™์„ ํ˜ผ์šฉํ•˜์—ฌ ๋ถ€๋ฅด๊ณค ํ•˜์ง€๋งŒ, ์ •๊ทœํ™”์˜ ๋…ผ๋ฆฌ์  ์—„๋ฐ€ํ•จ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ๋‘˜์„ ์ฒ ์ €ํžˆ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์ด ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ๊ตฌ์กฐ๋ฅผ ์•”์‹œํ•˜๋Š” ์šฉ์–ด๋ผ๋ฉด, ๋ฆด๋ ˆ์ด์…˜์€ ์ˆ˜ํ•™์  ์ง‘ํ•ฉ๋ก ์— ๋ฟŒ๋ฆฌ๋ฅผ ๋‘” ๋…ผ๋ฆฌ์  ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค.

๋ฆด๋ ˆ์ด์…˜์˜ ์ˆ˜ํ•™์  ๋ณธ์งˆ

๋ฆด๋ ˆ์ด์…˜์€ ๋ณธ์งˆ์ ์œผ๋กœ ํŠœํ”Œ(Tuple)๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ง‘ํ•ฉ๋ก ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ฆด๋ ˆ์ด์…˜ ๋‚ด์—์„œ ํŠœํ”Œ์˜ ์ˆœ์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฉฐ, ์ค‘๋ณต๋œ ํŠœํ”Œ ๋˜ํ•œ ์กด์žฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ด ๋‹จ์ˆœํ•œ ์ „์ œ๊ฐ€ ์ •๊ทœํ™”์˜ ๋Œ€์ „์ œ์ž…๋‹ˆ๋‹ค.

์ˆ˜ํ•™์  ์ง‘ํ•ฉ๊ณผ ๋ฆด๋ ˆ์ด์…˜

๋ฆด๋ ˆ์ด์…˜ ๋ชจ๋ธ์˜ ์ฐฝ์‹œ์ž E.F. Codd๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ง‘ํ•ฉ๋ก (Set Theory)์˜ n-ํ•ญ ๋ฆด๋ ˆ์ด์…˜(n-ary Relation) ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ํ–‰๊ณผ ์—ด์„ ๋งž์ถ”๋Š” ์ž‘์—…์„ ๋„˜์–ด, ๊ฐ ์†์„ฑ(Attribute)์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ง‘ํ•ฉ์ธ ๋„๋ฉ”์ธ(Domain)๋“ค์˜ ๋ฐ์นด๋ฅดํŠธ ๊ณฑ(Cartesian Product)์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์œผ๋กœ ๋ฆด๋ ˆ์ด์…˜์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™๋ฒˆ ๋„๋ฉ”์ธ $D_1$๊ณผ ์ด๋ฆ„ ๋„๋ฉ”์ธ $D_2$๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด๋“ค์˜ ๋ฐ์นด๋ฅดํŠธ ๊ณฑ $D_1 \times D_2$๋Š” ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ•™๋ฒˆ๊ณผ ์ด๋ฆ„์˜ ์กฐํ•ฉ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ โ€˜ํ•™์ƒโ€™ ๋ฆด๋ ˆ์ด์…˜์€ ์ด ๋ฐฉ๋Œ€ํ•œ ์กฐํ•ฉ ์ค‘ ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‹ค์ฒด(Entity)์™€ ์ผ์น˜ํ•˜๋Š” ์œ ํšจํ•œ ํŠœํ”Œ๋“ค๋งŒ์„ ์„ ํƒ์ ์œผ๋กœ ๋ณด์œ ํ•˜๋Š” ์ˆ˜ํ•™์  ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ˆ˜ํ•™์  ๊ธฐ์ดˆ๋Š” ์ •๊ทœํ™” ๊ณผ์ •์—์„œ ๋ฆด๋ ˆ์ด์…˜์„ ๋ถ„ํ•ดํ•˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์˜ ๋ฌด์†์‹ค์„ฑ(Losslessness)์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ฆด๋ ˆ์ด์…˜ ๋‚ด์˜ ๋ชจ๋“  ์†์„ฑ ๊ฐ’์€ โ€˜์›์ž์ (Atomic)โ€™์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™ ์—ญ์‹œ ์ง‘ํ•ฉ๋ก ์  ๋‹จ์ˆœ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋‚˜ ์ค‘์ฒฉ๋œ ๊ตฌ์กฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ด ์—„๊ฒฉํ•จ์ด ์˜คํžˆ๋ ค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ์™€ ์ธ์Šคํ„ด์Šค์˜ ์ •์˜

๋ฆด๋ ˆ์ด์…˜์„ ์ดํ•ดํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ถ•์€ โ€˜์ •์ ์ธ ๊ตฌ์กฐโ€™์™€ โ€˜๋™์ ์ธ ์ƒํƒœโ€™์˜ ๋ถ„๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ฐ๊ฐ ์Šคํ‚ค๋งˆ(Schema)์™€ ์ธ์Šคํ„ด์Šค(Instance)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

  1. ์Šคํ‚ค๋งˆ(Schema): ๋ฆด๋ ˆ์ด์…˜์˜ ์ด๋ฆ„, ์†์„ฑ์˜ ์ด๋ฆ„๊ณผ ํƒ€์ž…, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€์ˆ˜ํ•ด์•ผ ํ•  ์ œ์•ฝ ์กฐ๊ฑด(Integrity Constraints)์„ ์ •์˜ํ•˜๋Š” ๋…ผ๋ฆฌ์  ์„ค๊ณ„๋„์ž…๋‹ˆ๋‹ค. ์ด๋Š” โ€˜๋‚ดํฌ(Intension)โ€™๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์‰ฝ๊ฒŒ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ผˆ๋Œ€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ •๊ทœํ™”๋Š” ๋ฐ”๋กœ ์ด ์Šคํ‚ค๋งˆ๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ๋…ผ๋ฆฌ์  ๋ชจ์ˆœ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
  2. ์ธ์Šคํ„ด์Šค(Instance): ํŠน์ • ์‹œ์ ์— ๋ฆด๋ ˆ์ด์…˜์— ์กด์žฌํ•˜๋Š” ์‹ค์ œ ํŠœํ”Œ๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ด๋Š” โ€˜์™ธ์—ฐ(Extension)โ€™์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •์— ๋”ฐ๋ผ ๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

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

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

๐Ÿงฉ Anomaly

์ •๊ทœํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ๊ฒ‰๋ณด๊ธฐ์— ํŽธ๋ฆฌํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, ์‹œ๊ฐ„์ด ํ๋ฅผ์ˆ˜๋ก ์‹œ์Šคํ…œ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฐ‰์•„๋จน๋Š” โ€˜์ด์ƒ ํ˜„์ƒ(Anomaly)โ€™์ด๋ผ๋Š” ๋Œ€๊ฐ€๋ฅผ ์น˜๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ƒ ํ˜„์ƒ์€ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ฑ(Redundancy)์ด ๋…ผ๋ฆฌ์  ์ผ๊ด€์„ฑ์„ ์••๋„ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์„ค๊ณ„์˜ ๋ถ€์ž‘์šฉ์ž…๋‹ˆ๋‹ค. ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ๊ฐ€ ๊ฐ•์กฐํ•˜๋“ฏ, ๋‚˜์œ ์„ค๊ณ„๋Š” ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์Šค์Šค๋กœ๋ฅผ ๋ถ€์ •ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ชจ์ˆœ์˜ ๋Šช์œผ๋กœ ์šฐ๋ฆฌ๋ฅผ ์ธ๋„ํ•ฉ๋‹ˆ๋‹ค.

์‚ฝ์ž…, ์‚ญ์ œ, ๊ฐฑ์‹ ์˜ ์˜ค๋ฅ˜

์ •๊ทœํ™”๊ฐ€ ๊ฒฐ์—ฌ๋œ ๋ฆด๋ ˆ์ด์…˜์—์„œ ์šฐ๋ฆฌ๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ์น˜๋ช…์ ์ธ ์ด์ƒ ํ˜„์ƒ๊ณผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  1. ์‚ฝ์ž… ์ด์ƒ (Insertion Anomaly): ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค ํ•  ๋•Œ, ๋ถˆํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์›์น˜ ์•Š๋Š” ์ •๋ณด๊นŒ์ง€ ๊ฐ•์ œ๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋ฐ์ดํ„ฐ ์—†์ด๋Š” ์‚ฝ์ž… ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, โ€˜์ˆ˜๊ฐ•โ€™ ๋ฆด๋ ˆ์ด์…˜์— ํ•™์ƒ ์ •๋ณด์™€ ๊ณผ๋ชฉ ์ •๋ณด๊ฐ€ ์„ž์—ฌ ์žˆ๋‹ค๋ฉด, ์•„์ง ๊ณผ๋ชฉ์„ ์‹ ์ฒญํ•˜์ง€ ์•Š์€ ์‹ ์ž…์ƒ์€ ๊ณผ๋ชฉ ๋ฒˆํ˜ธ(Primary Key์˜ ์ผ๋ถ€)๊ฐ€ ์—†๋‹ค๋Š” ์ด์œ ๋กœ ํ•™์  ์‹œ์Šคํ…œ์— ๋“ฑ๋ก์กฐ์ฐจ ํ•  ์ˆ˜ ์—†๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฒŒ์–ด์ง‘๋‹ˆ๋‹ค.
  2. ์‚ญ์ œ ์ด์ƒ (Deletion Anomaly): ํŠœํ”Œ์„ ์‚ญ์ œํ•  ๋•Œ, ์‚ญ์ œํ•˜๋ ค๋˜ ์ •๋ณด์™€๋Š” ๋ฌด๊ด€ํ•œ ์œ ์šฉํ•œ ์ •๋ณด๊นŒ์ง€ ํ•จ๊ป˜ ์†Œ์‹ค๋˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ ํŠน์ • ๊ณผ๋ชฉ์˜ ์ˆ˜๊ฐ•์ƒ์ด ๋‹จ ํ•œ ๋ช…๋ฟ์ผ ๋•Œ, ๊ทธ ํ•™์ƒ์˜ ์ˆ˜๊ฐ• ์ทจ์†Œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๊ณผ๋ชฉ์˜ ์ƒ์„ธ ์ •๋ณด(๊ต์ˆ˜์ง„, ๊ฐ•์˜์‹ค ๋“ฑ)๊นŒ์ง€ ์‹œ์Šคํ…œ์—์„œ ์˜๊ตฌํžˆ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ์กด์žฌํ•ด์•ผ ํ•  ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ถ€์ˆ˜์ ์ธ ๊ด€๊ณ„์˜ ์‚ญ์ œ๋กœ ์ธํ•ด ์ฆ๋ฐœํ•ด๋ฒ„๋ฆฌ๋Š” ์ •๋ณด์˜ ๋น„๊ฐ€์—ญ์  ์†์‹ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐฑ์‹  ์ด์ƒ (Update Anomaly): ์ค‘๋ณต๋œ ํŠœํ”Œ ์ค‘ ์ผ๋ถ€๋งŒ ์ˆ˜์ •๋˜์–ด ๋ฐ์ดํ„ฐ ๊ฐ„ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ํ•™์ƒ์˜ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ๊ทธ ํ•™์ƒ์ด ์ˆ˜๊ฐ• ์ค‘์ธ ๋ชจ๋“  ํŠœํ”Œ์„ ์ฐพ์•„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ์‹œ์Šคํ…œ์€ ๋™์ผ ์ธ๋ฌผ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ โ€˜์ง„์‹คโ€™์„ ๋ณด์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ํŠœํ”Œ์„ ์กฐํšŒํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” โ€˜๋ฐ์ดํ„ฐ ๋ถ€ํŒจ(Data Corruption)โ€™์˜ ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํŒŒ๊ดด์˜ ์›์ธ

์ด๋Ÿฌํ•œ ํ˜„์ƒ๋“ค์€ ๋‹จ์ˆœํžˆ โ€˜๋ถˆํŽธํ•จโ€™์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ๋„๋ฅผ ๋ฌด๋„ˆ๋œจ๋ฆฌ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ๋ณต์žกํ•œ ๋ฐฉ์–ด ๋กœ์ง์„ ๊ฐ•์š”ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„ํ‚คํ…ํŠธ๋Š” ์ด๋ฅผ ์ฝ”๋“œ(Application level)๋กœ ํ•ด๊ฒฐํ•˜๋ ค ํ•˜๊ธฐ๋ณด๋‹ค, ๋ฆด๋ ˆ์ด์…˜์˜ ๊ตฌ์กฐ์  ๋ถ„ํ•ด๋ฅผ ํ†ตํ•ด ์—”์ง„(Database level) ์ˆ˜์ค€์—์„œ ์›์ฒœ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ƒ ํ˜„์ƒ์„ ๋ฐฉ์น˜ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋” ์ด์ƒ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” โ€˜Source of Truthโ€™๊ฐ€ ์•„๋‹Œ, ๋ถˆํ™•์‹ค์„ฑ์ด ๊ฐ€๋“ํ•œ ์ €์žฅ์†Œ๋กœ ์ „๋ฝํ•ฉ๋‹ˆ๋‹ค. ์ •๊ทœํ™”๋Š” ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ๋ชจ์ˆœ์„ ์ˆ˜ํ•™์ ์œผ๋กœ ์ฆ๋ช…ํ•˜๊ณ , ๊ฐ ์†์„ฑ์ด ์ž์‹ ์˜ ์ž๋ฆฌ๋ฅผ ์ฐพ์•„๊ฐ€๋„๋ก ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ์ •๋ฐ€ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ์ž‘์—…์ž…๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- 1. ๋น„์ •๊ทœํ™”๋œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ (ํ•™๋ฒˆ, ํ•™์ƒ๋ช…, ๊ณผ๋ชฉ๋ฒˆํ˜ธ, ๊ณผ๋ชฉ๋ช…, ๊ต์ˆ˜, ๊ฐ•์˜์‹ค)
-- PK๋Š” (student_id, course_id)๋กœ ์„ค์ •
CREATE TABLE course_registration (
    student_id INT,
    student_name VARCHAR(50),
    course_id VARCHAR(10),
    course_name VARCHAR(50),
    professor VARCHAR(50),
    room VARCHAR(20),
    PRIMARY KEY (student_id, course_id)
);

-- 2. ์‚ฝ์ž… ์ด์ƒ (Insertion Anomaly)
-- ์ƒํ™ฉ: ์‹ ์ž…์ƒ '๊น€์ฒ ์ˆ˜'๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ์•„์ง ์ˆ˜๊ฐ•์‹ ์ฒญ์„ ํ•˜์ง€ ์•Š์Œ.
-- ๋ฌธ์ œ: course_id๊ฐ€ PK์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ NULL์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„ ํ•™์ƒ ์ •๋ณด๋งŒ์œผ๋กœ๋Š” ์‚ฝ์ž… ๋ถˆ๊ฐ€.
INSERT INTO course_registration (student_id, student_name, course_id) 
VALUES (2024001, '๊น€์ฒ ์ˆ˜', NULL); -- Error: Column 'course_id' cannot be null

-- 3. ์‚ญ์ œ ์ด์ƒ (Deletion Anomaly)
-- ์ƒํ™ฉ: '์ด์˜ํฌ' ํ•™์ƒ์ด ์œ ์ผํ•˜๊ฒŒ ์ˆ˜๊ฐ•ํ•˜๋˜ 'Database' ๊ณผ๋ชฉ์„ ์ทจ์†Œํ•จ.
-- ๋ฌธ์ œ: ํ•™์ƒ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋ฉด 'Database' ๊ณผ๋ชฉ์˜ ๊ต์ˆ˜(์•ˆ๋“œ๋ ˆ)์™€ ๊ฐ•์˜์‹ค(B101) ์ •๋ณด๊นŒ์ง€ ์‹œ์Šคํ…œ์—์„œ ์ฆ๋ฐœํ•จ.
DELETE FROM course_registration WHERE student_id = 2024002;
-- ๊ฒฐ๊ณผ์ ์œผ๋กœ 'Database' ๊ณผ๋ชฉ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง.

-- 4. ๊ฐฑ์‹  ์ด์ƒ (Update Anomaly)
-- ์ƒํ™ฉ: '์•ˆ๋“œ๋ ˆ' ๊ต์ˆ˜์˜ ๊ฐ•์˜์‹ค์ด 'B101'์—์„œ 'C303'์œผ๋กœ ๋ณ€๊ฒฝ๋จ.
-- ๋ฌธ์ œ: ํ•ด๋‹น ๊ต์ˆ˜์˜ ๊ณผ๋ชฉ์„ ๋“ฃ๋Š” ๋ชจ๋“  ํ•™์ƒ์˜ ํŠœํ”Œ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•จ. ํ•˜๋‚˜๋ผ๋„ ๋ˆ„๋ฝ๋˜๋ฉด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฐœ์ƒ.
UPDATE course_registration SET room = 'C303' 
WHERE professor = '์•ˆ๋“œ๋ ˆ' AND student_id = 2024003;
-- 2024004 ํ•™์ƒ์˜ ํŠœํ”Œ์€ ์—ฌ์ „ํžˆ 'B101'๋กœ ๋‚จ์•„์žˆ์–ด ๋…ผ๋ฆฌ์  ๋ชจ์ˆœ ๋ฐœ์ƒ.

๐Ÿงฉ Functional Dependency

์ •๊ทœํ™”๋ผ๋Š” ๋ณต์žกํ•œ ์ˆ˜์ˆ ์„ ์ง‘๋„ํ•˜๊ธฐ ์œ„ํ•ด ์•„ํ‚คํ…ํŠธ๊ฐ€ ์†์— ์ฅ์–ด์•ผ ํ•  ๊ฐ€์žฅ ๋‚ ์นด๋กœ์šด ๋ฉ”์Šค(Scalpel)๋Š” ๋ฐ”๋กœ ํ•จ์ˆ˜์  ์ข…์†์„ฑ(Functional Dependency, FD)์ž…๋‹ˆ๋‹ค. ๋ฆด๋ ˆ์ด์…˜ ๋‚ด์˜ ์†์„ฑ๋“ค์ด ์„œ๋กœ ์–ด๋–ค ๋…ผ๋ฆฌ์  ์ธ๊ณผ๊ด€๊ณ„๋กœ ์–ฝํ˜€ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ์ •๊ทœํ™”๋Š” ๋‹จ์ˆœํžˆ ํ…Œ์ด๋ธ”์„ ํŒŒํŽธํ™”ํ•˜๋Š” ๋ฌด์˜๋ฏธํ•œ ์ž‘์—…์— ๊ทธ์น˜๊ณ  ๋ง™๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์  ์ข…์†์„ฑ์€ ์ˆ˜ํ•™์ ์œผ๋กœ ๋งค์šฐ ์—„๋ฐ€ํ•œ ํ† ๋Œ€ ์œ„์— ์„œ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆด๋ ˆ์ด์…˜ $R$์˜ ์†์„ฑ ์ง‘ํ•ฉ์„ $X$์™€ $Y$๋ผ๊ณ  ํ•  ๋•Œ, ์ž„์˜์˜ ๋‘ ํŠœํ”Œ $t_1, t_2$์—์„œ $X$์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด($t_1[X] = t_2[X]$) ๋ฐ˜๋“œ์‹œ $Y$์˜ ๊ฐ’๋„ ๊ฐ™์•„์•ผ($t_1[Y] = t_2[Y]$) ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์šฐ๋ฆฌ๋Š” โ€œ$Y$๋Š” $X$์— ํ•จ์ˆ˜์ ์œผ๋กœ ์ข…์†๋œ๋‹คโ€๊ณ  ๋งํ•˜๋ฉฐ, ์ด๋ฅผ $X \to Y$๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ์˜ ๋‚˜์—ด์„ ๋„˜์–ด, ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์— ํˆฌ์˜๋˜๋Š” ๊ฐ€์žฅ ๊ตฌ์ฒด์ ์ธ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ฒฐ์ •์ž์™€ ์ข…์†์ž์˜ ์‚ฌ์ƒ

์ด๋Ÿฌํ•œ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์€ ์†์„ฑ ๊ฐ„์˜ โ€˜๊ฒฐ์ •๋ก ์  ๊ด€๊ณ„โ€™๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ™”์‚ดํ‘œ์˜ ์‹œ์ž‘์ ์ธ $X$๋ฅผ ๊ฒฐ์ •์ž(Determinant), ๊ฒฐ๊ณผ๊ฐ’์ธ $Y$๋ฅผ ์ข…์†์ž(Dependent)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜ํ•™์˜ ํ•จ์ˆ˜ $y = f(x)$์™€ ์™„๋ฒฝํžˆ ๊ถค๋ฅผ ๊ฐ™์ด ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๊ฐ’ $x$๊ฐ€ ์ •ํ•ด์ง€๋ฉด ๊ฒฐ๊ณผ๊ฐ’ $y$๊ฐ€ ์œ ์ผํ•˜๊ฒŒ ๊ฒฐ์ •๋˜๋“ฏ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ๊ฒฐ์ •์ž์˜ ๊ฐ’์„ ์•Œ๋ฉด ์ข…์†์ž์˜ ๊ฐ’์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ด€๊ณ„๋Š” ๋ฐ์ดํ„ฐ์˜ ์˜๋ฏธ๋ก ์ (Semantic) ํŠน์„ฑ์—์„œ ๊ธฐ์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ โ†’ ์ด๋ฆ„์ด๋ผ๋Š” ์ข…์†์„ฑ์€ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๊ณ ์œ ํ•˜๋ฉฐ ํ•œ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์—์„œ ํƒ„์ƒํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ง€์ ์€, ์ด ๊ด€๊ณ„๊ฐ€ ํ˜„์žฌ ์ €์žฅ๋œ ์ธ์Šคํ„ด์Šค์— ์˜ํ•ด ์šฐ์—ฐํžˆ ์„ฑ๋ฆฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์Šคํ‚ค๋งˆ ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์˜๊ตฌํžˆ ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ๊ทœ์น™์ด๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ์—”ํŠธ๋กœํ”ผ๋ฅผ ํ†ต์ œํ•˜๊ธฐ ์œ„ํ•ด โ€˜๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ๋ฅผ ์ง€๋ฐฐํ•˜๋Š”๊ฐ€โ€™๋ฅผ ๊ทœ๋ช…ํ•˜๋Š” ์„ค๊ณ„์˜ ํ•ต์‹ฌ ๊ณต์ •์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์  ์ข…์†์˜ ์œ ํ˜•๋ณ„ ํŒ๋ณ„

์ •๊ทœํ™”์˜ ๋‹จ๊ณ„๋ฅผ ๊ฒฐ์ •์ง“๋Š” ๊ฒƒ์€ ์ข…์†์„ฑ์˜ โ€˜์–‘์ƒโ€™์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ๋ฒ”์ฃผ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ๊ฒฐํ•จ์„ ์ง„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ์™„์ „ ํ•จ์ˆ˜ ์ข…์† (Full Functional Dependency): ์ข…์†์ž๊ฐ€ ๊ฒฐ์ •์ž์˜ โ€˜์ „์ฒดโ€™์—๋งŒ ์ข…์†๋˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ณตํ•ฉํ‚ค๊ฐ€ ๊ฒฐ์ •์ž์ผ ๋•Œ, ํŠน์ • ์†์„ฑ์ด ํ‚ค์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ์ „์ฒด ์กฐํ•ฉ์— ์˜ํ•ด์„œ๋งŒ ๊ฒฐ์ •๋œ๋‹ค๋ฉด ์ด๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋งค์šฐ ๊ฒฌ๊ณ ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  • ๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์† (Partial Functional Dependency): ๊ฒฐ์ •์ž๊ฐ€ ๋ณตํ•ฉํ‚ค์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ข…์†์ž๊ฐ€ ํ‚ค์˜ ์ผ๋ถ€๋ถ„์—๋งŒ ๋ฐ˜์‘ํ•˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํ‚ค์˜ ๊ณ๋‹ค๋ฆฌ์— ๋ถ™์–ด ์ค‘๋ณต์„ ์•ผ๊ธฐํ•˜๋Š” ์‹ ํ˜ธ์ด๋ฉฐ, ์ œ2์ •๊ทœํ˜•(2NF)์—์„œ ๋„๋ ค๋‚ด์•ผ ํ•  ์ฃผ๋œ ํƒ€๊ฒŸ์ž…๋‹ˆ๋‹ค.
  • ์ดํ–‰์  ํ•จ์ˆ˜ ์ข…์† (Transitive Functional Dependency): ์ง์ ‘์ ์ธ ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ์†์„ฑ๋“ค์ด ์ค‘๊ฐ„ ๋งค๊ฐœ์ฒด๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. $X \to Y$์ด๊ณ  $Y \to Z$์—ฌ์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ $X \to Z$๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค๋ฉด, $Z$๋Š” $X$์— ์ดํ–‰์ ์œผ๋กœ ์ข…์†๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ3์ •๊ทœํ˜•(3NF)์€ ๋ฐ”๋กœ ์ด ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋Š์–ด๋‚ด์–ด ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ์˜ ์—ฐ์‡„ ๋ชจ์ˆœ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์•”์ŠคํŠธ๋กฑ์˜ ์ถ”๋ก  ๊ทœ์น™

ํ˜„์‹ค์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ์ˆ˜์‹ญ ๊ฐœ์˜ ์†์„ฑ์ด ์–ฝํ˜€ ์žˆ์–ด ์ข…์†์„ฑ์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์—”์ง€๋‹ˆ์–ด๋Š” ์•”์ŠคํŠธ๋กฑ์˜ ๊ณต๋ฆฌ(Armstrongโ€™s Axioms)๋ผ๋Š” ๋…ผ๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆจ๊ฒจ์ง„ ์ข…์†์„ฑ์„ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.

  • ์žฌ๊ท€์„ฑ ๊ทœ์น™ (Reflexivity): $Y \subseteq X$์ด๋ฉด, $X \to Y$์ด๋‹ค. (์ž๊ธฐ ์ž์‹ ์€ ์–ธ์ œ๋‚˜ ์ž์‹ ์„ ๊ฒฐ์ •ํ•จ)
  • ๋ถ€๊ฐ€์„ฑ ๊ทœ์น™ (Augmentation): $X \to Y$์ด๋ฉด, $XZ \to YZ$์ด๋‹ค. (์–‘๋ณ€์— ๋™์ผํ•œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด๋„ ์ข…์†์„ฑ์€ ์œ ์ง€๋จ)
  • ์ดํ–‰์„ฑ ๊ทœ์น™ (Transitivity): $X \to Y$์ด๊ณ  $Y \to Z$์ด๋ฉด, $X \to Z$์ด๋‹ค.

์ด ์„ธ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ทœ์น™์„ ์กฐํ•ฉํ•˜๋ฉด โ€˜๋ถ„ํ•ดโ€™, โ€˜์—ฐํ•ฉโ€™, โ€˜์˜์‚ฌ ์ดํ–‰โ€™ ๋“ฑ ํŒŒ์ƒ ๊ทœ์น™์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ๋งˆ์น˜ ์ˆ˜ํ•™ ๋ฌธ์ œ๋ฅผ ํ’€๋“ฏ ์ •๊ตํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋„์ถœ๋œ ํ์‡„ ์ง‘ํ•ฉ(Closure)์€ ํ•ด๋‹น ๋ฆด๋ ˆ์ด์…˜์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ›„๋ณดํ‚ค๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒฐ์ •์  ๋‹จ์„œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์„ ์™„๋ฒฝํžˆ ์ดํ•ดํ•œ๋‹ค๋Š” ๊ฒƒ์€, ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ถŒ๋ ฅ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ๋ˆ„๊ฐ€ โ€˜์ง„์ •ํ•œ ์ฃผ์ธ(Key)โ€™์ธ์ง€๋ฅผ ๊ฐ€๋ ค๋‚ด๋Š” ๊ณผ์ •๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿงฉ Normal Form

์ •๊ทœํ˜•(Normal Form)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๊ฐ€ ๋„๋‹ฌํ•ด์•ผ ํ•˜๋Š” ์ผ๋ จ์˜ ๋ฌด๊ฒฐ์„ฑ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ •๊ทœํ˜•์€ ์ด์ „ ๋‹จ๊ณ„์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ •๊ทœํ™” ๊ณผ์ •์€ ๋‹จ์ˆœํžˆ ํ…Œ์ด๋ธ”์„ ์ชผ๊ฐœ๋Š” ํ–‰์œ„๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์„ ์ˆ˜ํ•™์ ์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ โ€˜๋ฌด์†์‹ค ๋ถ„ํ•ด(Lossless Decomposition)โ€™๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๊ณ ๋„์˜ ๊ณตํ•™์  ์ตœ์ ํ™” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

๋ฌด์†์‹ค ์กฐ์ธ ๋ถ„ํ•ด

๋ฆด๋ ˆ์ด์…˜ $R$์„ $R_1$๊ณผ $R_2$๋กœ ๋ถ„ํ•ดํ–ˆ์„ ๋•Œ, ์ด๋“ค์„ ๋‹ค์‹œ ์ž์—ฐ ์กฐ์ธ(Natural Join)ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์›๋ž˜์˜ $R$๊ณผ ์™„๋ฒฝํžˆ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ถ„ํ•ด ํ›„ ์กฐ์ธํ–ˆ์„ ๋•Œ ์กด์žฌํ•˜์ง€ ์•Š๋˜ ๊ฐ€๊ณต์˜ ํŠœํ”Œ(Spurious Tuple)์ด ์ƒ์„ฑ๋œ๋‹ค๋ฉด, ๊ทธ ๋ถ„ํ•ด๋Š” ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์›์ž๊ฐ’๊ณผ ์ œ1์ •๊ทœํ˜•

์ œ1์ •๊ทœํ˜•(1NF)์€ ๋ฆด๋ ˆ์ด์…˜์ด ๋˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์ž๊ฒฉ ์š”๊ฑด์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์†์„ฑ์˜ ๋„๋ฉ”์ธ์ด ์›์ž๊ฐ’(Atomic Value)์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜(Multi-valued Attribute), ์œ ์‚ฌํ•œ ์†์„ฑ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ตฌ์กฐ(Repeating Group)๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1NF๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ์Šคํ‚ค๋งˆ๋Š” ์ฟผ๋ฆฌ์˜ ๋ณต์žก๋„๋ฅผ ๋น„์•ฝ์ ์œผ๋กœ ์ƒ์Šน์‹œํ‚ต๋‹ˆ๋‹ค. ํŠน์ • ์†์„ฑ ๊ฐ’์˜ ์ผ๋ถ€๋งŒ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ํ–‰์œ„๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์ง‘๊ณ„์™€ ๋ถ„์„ ๊ธฐ๋Šฅ์ด ๋งˆ๋น„๋ฉ๋‹ˆ๋‹ค. 1NF์˜ ๋‹ฌ์„ฑ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ํŒŒํŽธํ™”ํ•˜์—ฌ, ํ–ฅํ›„ ์ง„ํ–‰๋  ๋ชจ๋“  ์ •๊ทœํ™” ๋‹จ๊ณ„์˜ ๊ธฐ์ดˆ ์ฒด๋ ฅ์„ ํ™•๋ณดํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์™„์ „ ํ•จ์ˆ˜ ์ข…์†๊ณผ ์ œ2์ •๊ทœํ˜•

์ œ2์ •๊ทœํ˜•(2NF)์˜ ํ•ต์‹ฌ ํƒ€๊ฒŸ์€ โ€˜๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์†(Partial Functional Dependency)โ€™์ž…๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ๊ธฐ๋ณธํ‚ค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์†์„ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ โ€˜๋ณตํ•ฉํ‚ค(Composite Key)โ€™์ผ ๋•Œ ์ฃผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธํ‚ค์˜ ์ผ๋ถ€๋ถ„์—๋งŒ ์ข…์†๋œ ์†์„ฑ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ์†์„ฑ์€ ๊ธฐ๋ณธํ‚ค ์ „์ฒด์™€ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ‚ค์˜ ์ผ๋ถ€์— ๊ธฐ์ƒํ•˜๊ณ  ์žˆ๋Š” ๊ผด์ž…๋‹ˆ๋‹ค. 2NF๋Š” ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„ ์ข…์† ์†์„ฑ๋“ค์„ ๋ณ„๋„์˜ ๋ฆด๋ ˆ์ด์…˜์œผ๋กœ ๋ถ„๋ฆฌํ•  ๊ฒƒ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธํ‚ค ์ „์ฒด์— ๋Œ€ํ•ด์„œ๋งŒ ์†์„ฑ๋“ค์ด ๊ฒฐ์ •๋˜๋Š” โ€˜์™„์ „ ํ•จ์ˆ˜ ์ข…์†โ€™ ์ƒํƒœ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์ด ์™„๋ฃŒ๋˜๋ฉด, ํŠน์ • ์—”ํ‹ฐํ‹ฐ์˜ ๋ถ€์ˆ˜์ ์ธ ์ •๋ณด ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์—”ํ‹ฐํ‹ฐ์˜ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๊ฐ€ ์ œํ•œ๋˜๋˜ ์ด์ƒ ํ˜„์ƒ์ด ํš๊ธฐ์ ์œผ๋กœ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์ดํ–‰์  ์ข…์†๊ณผ ์ œ3์ •๊ทœํ˜•

์ œ3์ •๊ทœํ˜•(3NF)์€ ๊ธฐ๋ณธํ‚ค๊ฐ€ ์•„๋‹Œ ์†์„ฑ๋“ค ์‚ฌ์ด์˜ ์ข…์† ๊ด€๊ณ„, ์ฆ‰ โ€˜์ดํ–‰์  ํ•จ์ˆ˜ ์ข…์†(Transitive Functional Dependency)โ€™์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. $X \to Y$์ด๊ณ  $Y \to Z$์ผ ๋•Œ $X \to Z$๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค๋ฉด, $Z$๋Š” $X$์— ์ดํ–‰์ ์œผ๋กœ ์ข…์†๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค๋ฌด์  ๊ด€์ ์—์„œ 3NF๋Š” โ€œ๊ธฐ๋ณธํ‚ค๊ฐ€ ์•„๋‹Œ ์†์„ฑ์€ ์˜ค์ง ๊ธฐ๋ณธํ‚ค์— ์˜ํ•ด์„œ๋งŒ ๊ฒฐ์ •๋˜์–ด์•ผ ํ•œ๋‹คโ€๋Š” ์›์น™์œผ๋กœ ์š”์•ฝ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, โ€˜ํ•™๋ฒˆโ€™์ด โ€˜ํ•™๊ณผโ€™๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  โ€˜ํ•™๊ณผโ€™๊ฐ€ โ€˜๊ฐ•์˜์‹คโ€™์„ ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด, ํ•™๋ฒˆ ๋ฆด๋ ˆ์ด์…˜์— ๊ฐ•์˜์‹ค ์ •๋ณด๋ฅผ ๋‘์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํ•™๊ณผ์™€ ๊ฐ•์˜์‹ค์˜ ๊ด€๊ณ„๋ฅผ ๋ณ„๋„ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ํ•™๊ณผ ์ •๋ณด๊ฐ€ ์ˆ˜์ •๋  ๋•Œ ์ˆ˜๋งŒ ๋ช…์˜ ํ•™์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ผ์ด ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ๊ฐฑ์‹  ์ด์ƒ์˜ ์œ„ํ—˜์„ ์›์ฒœ ๋ด‰์‡„ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ •์ž ๋ณด์™„๊ณผ BCNF

Boyce-Codd ์ •๊ทœํ˜•(BCNF)์€ 3NF๋ฅผ ๋”์šฑ ์—„๊ฒฉํ•˜๊ฒŒ ๋ณด์™„ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. 3NF๋ฅผ ๋งŒ์กฑํ•˜๋”๋ผ๋„, ๋ชจ๋“  ๊ฒฐ์ •์ž(Determinant)๊ฐ€ ํ›„๋ณดํ‚ค(Candidate Key)๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ›„๋ณดํ‚ค๊ฐ€ ์ค‘์ฒฉ๋˜์–ด ์กด์žฌํ•˜๋Š” ๋ณต์žกํ•œ ๋ฆด๋ ˆ์ด์…˜์—์„œ ์ด๋Ÿฌํ•œ ํ—ˆ์ ์ด ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
-- [Initial: ๋น„์ •๊ทœํ™” ์ƒํƒœ]
-- orders (order_id, customer_id, customer_name, items[item_id, item_name, quantity])
-- ๋ฌธ์ œ: items ์†์„ฑ์ด ์›์ž์ ์ด์ง€ ์•Š์Œ (๋‹ค์ค‘๊ฐ’ ์†์„ฑ)

-- [Step 1: ์ œ1์ •๊ทœํ˜• (1NF)]
-- ์›์น™: ๋ชจ๋“  ์†์„ฑ์€ ์›์ž๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•จ.
CREATE TABLE order_1nf (
    order_id INT,
    customer_id INT,
    customer_name VARCHAR(50),
    item_id INT,
    item_name VARCHAR(50),
    quantity INT,
    PRIMARY KEY (order_id, item_id)
);

-- [Step 2: ์ œ2์ •๊ทœํ˜• (2NF)]
-- ์›์น™: ๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์† ์ œ๊ฑฐ (๊ธฐ๋ณธํ‚ค์˜ ์ผ๋ถ€์—๋งŒ ์ข…์†๋œ ์†์„ฑ ๋ถ„๋ฆฌ)
-- (order_id, item_id) -> quantity (์™„์ „ ์ข…์†)
-- order_id -> customer_id, customer_name (๋ถ€๋ถ„ ์ข…์†)
-- item_id -> item_name (๋ถ€๋ถ„ ์ข…์†)

CREATE TABLE order_header ( -- ์ฃผ๋ฌธ ๊ธฐ๋ณธ ์ •๋ณด
    order_id INT PRIMARY KEY,
    customer_id INT,
    customer_name VARCHAR(50)
);

CREATE TABLE item ( -- ์•„์ดํ…œ ๋งˆ์Šคํ„ฐ
    item_id INT PRIMARY KEY,
    item_name VARCHAR(50)
);

CREATE TABLE order_items ( -- ์ฃผ๋ฌธ ์ƒ์„ธ (์™„์ „ ์ข…์†)
    order_id INT,
    item_id INT,
    quantity INT,
    PRIMARY KEY (order_id, item_id),
    FOREIGN KEY (order_id) REFERENCES order_header(order_id),
    FOREIGN KEY (item_id) REFERENCES item(item_id)
);

-- [Step 3: ์ œ3์ •๊ทœํ˜• (3NF)]
-- ์›์น™: ์ดํ–‰์  ํ•จ์ˆ˜ ์ข…์† ์ œ๊ฑฐ (์ผ๋ฐ˜ ์†์„ฑ ๊ฐ„์˜ ์ข…์† ์ œ๊ฑฐ)
-- order_header์—์„œ order_id -> customer_id ์ด๊ณ  customer_id -> customer_name ์ž„.

CREATE TABLE customer ( -- ๊ณ ๊ฐ ๋งˆ์Šคํ„ฐ๋กœ ๋ถ„๋ฆฌ
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(50)
);

ALTER TABLE order_header DROP COLUMN customer_name;
ALTER TABLE order_header ADD FOREIGN KEY (customer_id) REFERENCES customer(customer_id);

-- [Step 4: BCNF]
-- ์›์น™: ๋ชจ๋“  ๊ฒฐ์ •์ž๋Š” ํ›„๋ณดํ‚ค์—ฌ์•ผ ํ•จ.
-- ๋งŒ์•ฝ (ํ•™๋ฒˆ, ๊ณผ๋ชฉ) -> ๊ต์ˆ˜ ์ด๊ณ  ๊ต์ˆ˜ -> ๊ณผ๋ชฉ ์ธ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๋ฉด,
-- ๊ฒฐ์ •์ž์ธ '๊ต์ˆ˜'๊ฐ€ ํ›„๋ณดํ‚ค๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•จ.

CREATE TABLE professor_subject (
    professor VARCHAR(50) PRIMARY KEY,
    subject_name VARCHAR(50)
);

CREATE TABLE student_course (
    student_id INT,
    professor VARCHAR(50),
    PRIMARY KEY (student_id, professor),
    FOREIGN KEY (professor) REFERENCES professor_subject(professor)
);

Advanced Design

์ •๊ทœํ™”์˜ ์—ฌ์ •์€ BCNF์—์„œ ๋ฉˆ์ถ”์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„๋ก ์‹ค๋ฌด์—์„œ๋Š” 3NF๋‚˜ BCNF ์ˆ˜์ค€์—์„œ ์„ค๊ณ„๋ฅผ ํƒ€ํ˜‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ, ๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ์™„๊ฒฐ์„ฑ์„ ์ถ”๊ตฌํ•˜๋Š” ์•„ํ‚คํ…ํŠธ๋ผ๋ฉด ๊ทธ ๋„ˆ๋จธ์— ์กด์žฌํ•˜๋Š” ๊ณ ์ฐจ ์ •๊ทœํ˜•๊ณผ ์‹ค๋ฌด์  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„์˜ ๊ฒฝ๊ณ„๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ์ด๋ก ์ ์ธ ์œ ํฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ๋ณต์žก์„ฑ์ด ์ž„๊ณ„์ ์„ ๋„˜์—ˆ์„ ๋•Œ ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•˜๋Š” ์ตœํ›„์˜ ์„ค๊ณ„ ์ „๋žต์ž…๋‹ˆ๋‹ค.

์ •๊ทœํ™”์˜ ์—ญ์„ค

์ •๊ทœํ™”๋Š” ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ ์“ฐ๊ธฐ(Write) ์„ฑ๋Šฅ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋†’์ด์ง€๋งŒ, ํŒŒํŽธํ™”๋œ ํ…Œ์ด๋ธ”์„ ๋‹ค์‹œ ํ•ฉ์น˜๋Š” ์กฐ์ธ(Join) ๋น„์šฉ์€ ์ฝ๊ธฐ(Read) ์„ฑ๋Šฅ์˜ ๋ณ‘๋ชฉ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ์„ค๊ณ„๋Š” ์ˆ˜ํ•™์  ์ •๊ตํ•จ๊ณผ ๋ฌผ๋ฆฌ์  ์„ฑ๋Šฅ ์‚ฌ์ด์˜ ์ •๊ตํ•œ ์ค„ํƒ€๊ธฐ ๊ฒฐ๊ณผ๋ฌผ์ž…๋‹ˆ๋‹ค.

๋‹ค์น˜ ์ข…์†๊ณผ ์ œ4์ •๊ทœํ˜•

์ œ4์ •๊ทœํ˜•(4NF)์€ โ€˜๋‹ค์น˜ ์ข…์†(Multi-valued Dependency, MVD)โ€™์ด๋ผ๋Š” ๋…ํŠนํ•œ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋ฆด๋ ˆ์ด์…˜ ๋‚ด์— ๋…๋ฆฝ์ ์ธ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋‹ค๊ฐ€ ์†์„ฑ(Multi-valued Attribute)์ด ๊ธฐ๋ณธํ‚ค์— ์ข…์†๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ๋ช…์˜ โ€˜๊ต์ˆ˜โ€™๊ฐ€ ์—ฌ๋Ÿฌ โ€˜์ „๊ณตโ€™์„ ๊ฐ€๋ฅด์น˜๊ณ  ๋™์‹œ์— ์—ฌ๋Ÿฌ โ€˜์–ธ์–ดโ€™๋ฅผ ๊ตฌ์‚ฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ „๊ณต๊ณผ ์–ธ์–ด๋Š” ์„œ๋กœ ์•„๋ฌด๋Ÿฐ ์ƒ๊ด€์ด ์—†์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ํ•˜๋‚˜์˜ ๋ฆด๋ ˆ์ด์…˜์— ๋ชฐ์•„๋„ฃ์œผ๋ฉด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์ด ํŠœํ”Œ๋กœ ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ํญ๋ฐœ์ ์ธ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 4NF๋Š” ์ด๋Ÿฌํ•œ ๋…๋ฆฝ์ ์ธ ๋‹ค์น˜ ์ข…์† ๊ด€๊ณ„๋ฅผ ๋ณ„๋„์˜ ๋ฆด๋ ˆ์ด์…˜์œผ๋กœ ๋ถ„๋ฆฌํ•  ๊ฒƒ์„ ๋ช…๋ นํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์˜๋ฏธ์  ๋…๋ฆฝ์„ฑ์„ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ๋กœ ์น˜ํ™˜ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์กฐ์ธ ์ข…์†๊ณผ ๋ฌด์†์‹ค ๋ถ„ํ•ด

์ œ5์ •๊ทœํ˜•(5NF)์€ ์ •๊ทœํ™”์˜ ์ด๋ก ์  ์ •์ ์ธ โ€˜์กฐ์ธ ์ข…์†(Join Dependency)โ€™์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฆด๋ ˆ์ด์…˜์„ ๋‘ ๊ฐœ๋กœ ๋ถ„ํ•ดํ–ˆ์„ ๋•Œ๋Š” ์ •๋ณด ์†์‹ค์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์„ธ ๊ฐœ ์ด์ƒ์˜ ๋ฆด๋ ˆ์ด์…˜์œผ๋กœ ๋ถ„ํ•ดํ–ˆ์„ ๋•Œ ๋น„๋กœ์†Œ ๋ฌด์†์‹ค ์กฐ์ธ์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ 5NF๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์€ ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆœํ™˜ ๊ด€๊ณ„(Recursive Relationship)๋‚˜ ๋ณต์žกํ•œ ๋‹ค์ž๊ฐ„ ๊ด€๊ณ„(n-ary Relationship)๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, 5NF์˜ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•œ ์กฐ์ธ ์†์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์Šคํ‚ค๋งˆ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” โ€œ๋ฐ์ดํ„ฐ๋Š” ๊ทธ ๋ณธ์—ฐ์˜ ์˜๋ฏธ๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„๊นŒ์ง€ ์ชผ๊ฐœ์ ธ์•ผ ํ•œ๋‹คโ€๋Š” ์›์น™์˜ ์ข…์ฐฉ์—ญ์ž…๋‹ˆ๋‹ค.

์„ค๊ณ„ ์ตœ์ ํ™”์™€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

๋ชจ๋“  ๊ธฐ์ˆ ์  ๊ฒฐ์ •์—๋Š” ๋น„์šฉ์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ •๊ทœํ™”๊ฐ€ ๊นŠ์–ด์งˆ์ˆ˜๋ก ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์€ ๊ฒฌ๊ณ ํ•ด์ง€์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋Š” ๋” ๋งŽ์€ JOIN ๋ฌธ๊ณผ ์‹ธ์›Œ์•ผ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์€ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•˜์—ฌ ํฉ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ชจ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ „๋žต์  ๋ฐ˜์ •๊ทœํ™”(Denormalization): ์ฝ๊ธฐ ๋นˆ๋„๊ฐ€ ์••๋„์ ์œผ๋กœ ๋†’๊ณ  ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ์ด ์ง€๊ทนํžˆ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ, ์˜๋„์ ์œผ๋กœ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ค๊ณ„๋ฅผ ํฌ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์ •๊ทœํ™”๋œ ๋ชจ๋ธ์„ โ€˜๊ณ„์‚ฐ๋œ ๋ฐฉ์‹โ€™์œผ๋กœ ๋ถ•๊ดด์‹œํ‚ค๋Š” ๊ณ ๋„์˜ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
  2. ๋ฌด๊ฒฐ์„ฑ ๋น„์šฉ์˜ ์ด์ „: ๋ฐ˜์ •๊ทœํ™”๋ฅผ ์„ ํƒํ–ˆ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณด์žฅํ•ด์ฃผ๋˜ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ์˜ ์ฑ…์ž„์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์ด๋‚˜ ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค๋กœ ์ด์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น„์šฉ์ด ์กฐ์ธ ๋น„์šฉ๋ณด๋‹ค ์ €๋ ดํ•œ์ง€ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด ์‹œ๋‹ˆ์–ด ์•„ํ‚คํ…ํŠธ์˜ ์—ญ๋Ÿ‰์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ํ›Œ๋ฅญํ•œ ์Šคํ‚ค๋งˆ ์„ค๊ณ„๋ž€ ์ •๊ทœํ˜•์ด๋ผ๋Š” ๋ถ๊ทน์„ฑ์„ ๋”ฐ๋ผ๊ฐ€๋˜, ํ˜„์‹ค์˜ ์ธํ”„๋ผ ์ œ์•ฝ์ด๋ผ๋Š” ์ค‘๋ ฅ์„ ๋ฌด์‹œํ•˜์ง€ ์•Š๋Š” ๊ท ํ˜• ๊ฐ๊ฐ์—์„œ ํƒ„์ƒํ•ฉ๋‹ˆ๋‹ค.

Summary

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”๋Š” ๋‹จ์ˆœํžˆ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ์ˆ ์  ์ ˆ์ฐจ๋ฅผ ๋„˜์–ด, ์ง‘ํ•ฉ๋ก ๊ณผ ํ•จ์ˆ˜์  ์ข…์†์„ฑ์ด๋ผ๋Š” ์ˆ˜ํ•™์  ํ† ๋Œ€ ์œ„์— ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์„ธ์šฐ๋Š” ๊ณ ๋„์˜ ์„ค๊ณ„ ์ฒ ํ•™์ž…๋‹ˆ๋‹ค. ์ด์ƒ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆด๋ ˆ์ด์…˜์„ ์›์ž์  ๋‹จ์œ„๋กœ ๋ถ„ํ•ดํ•˜๋Š” ๊ณผ์ •์€ ์‹œ์Šคํ…œ์˜ ์—”ํŠธ๋กœํ”ผ๋ฅผ ๋‚ฎ์ถ”๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(Single Source of Truth)์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋น„๋ก ๊ณ ์ฐจ ์ •๊ทœํ™”๋กœ ๊ฐˆ์ˆ˜๋ก ์กฐ์ธ ๋น„์šฉ๊ณผ ์„ฑ๋Šฅ ์‚ฌ์ด์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์ •๊ทœํ™”๋œ ๋ชจ๋ธ์„ ๊ธฐ์ค€์ ์œผ๋กœ ์‚ผ์•„ ์ „๋žต์ ์ธ ๋ฐ˜์ •๊ทœํ™”๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋Œ€ ์•„ํ‚คํ…ํŠธ์˜ ํ•ต์‹ฌ ์—ญ๋Ÿ‰์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๊ฒฌ๊ณ ํ•œ ์Šคํ‚ค๋งˆ ์„ค๊ณ„๋Š” ๋ณ€ํ™”ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์†์—์„œ๋„ ๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋ฐฉ์–ด ๊ธฐ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

References

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