๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Computer Science/Database

20 Normalization

by Dowon Kang 2024. 1. 16.

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

  • FD์™€ KEY๋งŒ์œผ๋กœ ์ •์˜๋˜๋Š” Normal Forms
  • 3NF๊นŒ์ง€ ๋„๋‹ฌํ•˜๋ฉด ์ •๊ทœํ™”๋˜์—ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ณดํ†ต ์‹ค๋ฌด์—์„œ๋Š” 3NF ํ˜น์€ BCNF๊นŒ์ง€๋งŒ ์ง„ํ–‰ 

 


 

์ •๊ทœํ™”์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์•Œ์•„๋ณผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ Key

  • Super Key (์Šˆํผํ‚ค): ์Šˆํผํ‚ค๋Š” ๋ฆด๋ ˆ์ด์…˜์—์„œ ํŠœํ”Œ๋“ค์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ(๋˜๋Š” ์†์„ฑ์˜ ์ง‘ํ•ฉ)์˜ ์กฐํ•ฉ
  • Candidate Key (ํ›„๋ณด ํ‚ค): ํ›„๋ณด ํ‚ค๋Š” ์Šˆํผ ํ‚ค์ด๋ฉด์„œ๋„ ๋‘ ๊ฐœ์˜ attributes๊ฐ€ ์Šˆํผํ‚ค๋กœ ํ™œ์•ฝํ•  ๋–„ (ํ•˜๋‚˜๊ฐ€ ์—†์œผ๋ฉด ์•ˆ ๋จ)
  • Primary Key (๊ธฐ๋ณธ ํ‚ค): ๊ธฐ๋ณธ ํ‚ค๋Š” ํ›„๋ณด ํ‚ค ์ค‘์—์„œ ์„ ํƒ๋œ ์ฃผ ํ‚ค๋กœ, ๊ฐ ํŠœํ”Œ์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ์ฃผ์š” ์†์„ฑ
  • Prime Attribute (ํ”„๋ผ์ž„ ์†์„ฑ): ์Šˆํผํ‚ค, ํ›„๋ณดํ‚ค, ๊ธฐ๋ณธํ‚ค ์–ด๋””๋ผ๋„ 'ํ‚ค'๋ผ๋Š” ์˜์—ญ์— ์†ํ•ด ์žˆ๋Š” ์†์„ฑ
  • Non-Prime Attribute (๋น„ํ”„๋ผ์ž„ ์†์„ฑ): ๋น„ํ”„๋ผ์ž„ ์†์„ฑ์€ ํ›„๋ณด ํ‚ค์˜ ๊ตฌ์„ฑ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ์†์„ฑ

 


 

 

1NF (First Normal Form - ์ œ1 ์ •๊ทœํ˜•)

ํ…Œ์ด๋ธ”์˜ ๊ฐ ์†์„ฑ์€ ์›์ž๊ฐ’(Atomic Value)์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ์†์„ฑ์—๋Š” ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋‹ค์ค‘ ๊ฐ’์ด๋‚˜ ๋ชฉ๋ก์„ ํฌํ•จํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Before 1NF
After 1NF

 

 

 


2NF (Second Normal Form - ์ œ2 ์ •๊ทœํ˜•)

ํ…Œ์ด๋ธ”์ด 1NF์ด๋ฉด์„œ, ๋ชจ๋“  Non-prime attribute๋Š” ๋ชจ๋“  key์— fully functionally dependent ํ•ด์•ผ ํ•œ๋‹ค.

After 1NF (before 2NF)

  • ์Šˆํผํ‚ค์ธ account_id (X) ์†์„ฑ์ด non-prime attributes๋“ค์„ ๊ฒฐ์ •์‹œํ‚ค์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 
  • ํ›„๋ณดํ‚ค์ธ {bank_name, account_name} ์†์„ฑ์ด non-prime attributes๋“ค์„ ๊ฒฐ์ •์‹œํ‚ค์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

After 2NF
After 2NF

 

 

 


3NF (Third Normal Form - ์ œ3 ์ •๊ทœํ˜•)

ํ…Œ์ด๋ธ”์ด 2NF์ด๋ฉด์„œ, non-prime attribute๋Š” ์–ด๋–ค key์—๋„ transitively dependentํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. (non-prime attributes ์‚ฌ์ด์—๋Š” FD๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค)

Transitive FD 
X -> Y & Y -> Z ์ผ ๋•Œ, X -> Z (unless either Y or Z is not subset๋ถ€๋ถ„์ง‘ of any key)

 

After 2NF (Before 3NF)

  • {bank_name, account_num} (X) -> empl_id (Y),  empl_id (Y) -> empl_name (Z) : transitively dependent ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‹ค!!
  • (์œ„์— ์กฐ๊ฑด์„ ์ข€ ๋” ์‰ฝ๊ฒŒ) non-prime attribute์ธ empl_id๊ฐ€ empl_name์„ FDํ•˜๊ณ  ์žˆ๋‹ค!! 

After 3NF
After 3NF

 

 


BCNF (Boyce-Codd Normal Form)

ํ…Œ์ด๋ธ”์ด 3NF์ด๋ฉด์„œ, ๋ชจ๋“  ์œ ํšจํ•œ non-trivial FD X -> Y๋Š” X๊ฐ€ super key์—ฌ์•ผ ํ•œ๋‹ค.

After 3NF (Before BCNF)

  • Class(X)์™€ ์€ํ–‰ ์ด๋ฆ„(Y)์ด FD ๊ด€๊ณ„์— ์žˆ๋‹ค. BCNF์— ๋”ฐ๋ฅด๋ฉด X๋Š” ์Šˆํผํ‚ค์—ฌ์•ผ๋งŒ ํ•œ๋‹ค. ๊ทผ๋ฐ ์•„๋‹ˆ๋‹ค!! 

After BCNF
After BCNF

 

 

์—ญ์ •๊ทœํ™”(Denormalization)

๋•Œ๋กœ๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด๋‚˜ ํŠน์ • ์ฟผ๋ฆฌ์˜ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ •๊ทœํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ญ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์—ญ์ •๊ทœํ™”(Denormalization)์ž…๋‹ˆ๋‹ค.

  1. ์„ฑ๋Šฅ ํ–ฅ์ƒ: ์ •๊ทœํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์กฐ์ธํ•  ๋•Œ ์กฐ๊ธˆ ๋” ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ์ž์›์ด ์†Œ์š”
  2. ๊ฐ„๊ฒฐ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ: ์ •๊ทœํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์กฐ์ธ์ด ํ•„์š”
  3. ํŠน์ •ํ•œ ์ฟผ๋ฆฌ ์ตœ์ ํ™”: ํŠน์ •ํ•œ ์œ ํ˜•์˜ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์—ญ์ •๊ทœํ™”๋ฅผ ์ˆ˜ํ–‰
  4. ๋ณต์ œ ๋ฐ ์บ์‹ฑ ํ™œ์šฉ: ์—ญ์ •๊ทœํ™”๋Š” ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ๋ณต์ œํ•˜๊ฑฐ๋‚˜ ์บ์‹ฑํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ

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

 

 

 


Normalization
Normalization is the process of organizing data in a database to reduce redundancy and improve data integrity by decomposing tables into smaller, related tables.

Denormalization
Denormalization is the reverse process of normalization, involving the reintroduction of redundancy to improve query performance, simplify data retrieval, or meet specific performance requirements in a database.

 

'Computer Science > Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

25 NoSQL  (0) 2024.01.18
21 Index  (0) 2024.01.17
12 Trigger  (0) 2024.01.13
9 ORDER BY, GROUP BY (feat. HAVING)  (0) 2024.01.12
8 JOIN  (0) 2024.01.12

๋Œ“๊ธ€