SQL_

[SQLD] 정규화 & 그 문제점

Joyfullyever 2025. 2. 20. 23:01

#1 BCNF

: Boyce-Codd Normal From

: 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며 서로 중첩되어야 함

: 제3정규화보다 좀 더 강하게 제약조건을 거는 것 (제3정규화 <= BCNF)

 

#2 정규화 추가설명

✴︎ 제1정규화

: 속성을 보고 한개의 속성으로 유일성을 만족할 수 있는지 확인

: 식별자를 찾는 과정

✴︎제2정규화

: 기본키가 두개 이상인 경우 대상

: 모든 속성이 식별자에 종속해야 하며, 그렇지 않은 경우 분해

: 제1정규화와 마찬가지로 중복 확인

 

#3 정규화의 문제점

정규화 : 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높힘

→ 하지만, 데이터 조회(SELECT)시 조인(JOIN)을 유발하기 때문에 CPU와 메모리를 많이 사용함

 

#4 옵티마이저 Optimizer

: 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진

: 컴퓨터의 두뇌 = CPU / DBMS의 두뇌 = OPTIMIZER

 

#5. 인덱스 Index

: TABLE의 컬럼을 색인화(따로 파일로 저장)하여 검색 시 해당 TABLE의 레코드를 Full Scan하는 것이 아닌, 색인화 되어있는 INDEX 파일을 검색하여 검색 속도를 빠르게 함

 

#6 반정규화

: 조인이 부하를 유발하는 것은 분명

: 반정규화를 하여 하나의 테이블에 저장한다면 조인을 통한 성능 저하는 해결 → 성능 저하 해결을 위해 반정규화가 존재

: 시스템의 성능을 향상 시키는 통합 프로세스

: 정규화와 반정규화를 바꾸면 안되고 섞어서 사용해야함

: 원자성, 데이터 무결성을 보장할 수 없지만 성능 향상을 위해 의도적으로 중복을 만듬

 

#7 정규화를 사용한 성능 튜닝 → 성능 최적화

: 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생

: 반정규화를 하여 한 행을 읽기 위해 여러개의 블록을 읽게 되면 디스크 입•출력이 증가 → 성능이 저하

: 정규화는 입출력 데이터의 양을 줄여서 성능을 향상 시킬 수 있음