Meme's IT

[SQLD] ★정규화★와 성능 본문

공부/SQLD

[SQLD] ★정규화★와 성능

Memez 2023. 10. 18. 16:36

# 정규화 (Normalization)

데이터 분해 과정, 이상현상 제거

반복되는 데이터를 분리하고 각 데이터가 제자리를 잘 찾아가도록 정리하는 과정

 

▶ 1차 정규화(1NF)

같은 성격 or 내용인 컬럼이 연속될 때 컬럼을 제거하고 테이블을 생성

즉, 중복되는 속성을 제거하는 작업

1차 정규화를 통해 속성의 원자성을 확보할 수 있다

 

▶ 2차 정규화(2NF)

모든 속성은 반드시 기본키 전부에 종속되어야 한다

부분적 함수 종속성을 제거하는 작업

하지만, 1차 정규화 결과 기본키가 한개라면 생략

예를 들어서, 하나의 테이블이 학생 번호, 듣는 강의, 강의실로 이루어져 있을 때

학생 번호 → 듣는 강의

듣는 강의 → 강의실

으로 종속되므로 테이블을 쪼개줘야 한다

 

▶ 3차 정규화(3NF)

기본키가 아닌 다른 속성들끼리 종속되어서는 안된다.

예를 들어, 하나의 테이블 안에 (학과, 이름, 학번, 학과 코드)가 있을 때

학번이 기본키가 되고 나머진 종속 된다.

학번을 제외하고 다른 데이터들 중 학과 코드는 학과에 종속되므로 기본키가 아닌 다른 속성들 끼리 종속되므로

테이블을 나눠줘야 한다.

 

▶ 그 외에

  • 보이스코드 정규화: 후보키가 기본키를 종속시킬 때 분해한다
  • 4차 정규화: 칼럼 여러개가 하나의 칼럼에 종속 될 때 다중값 중복성을 제거한다
  • 5차 정규화: 결합 종속의 경우 분해한다

 

 

# 정규화와 성능

정규화는 입출력 데이터의 양을 줄여 성능을 향상시킴

1. 정규화로 인한 성능 향상

  • 유연성 증가
  • 재활용 가능성 증가: 개념이 세분화되었기 때문에
  • 데이터 중복 최소화

2. 정규화로 인한 성능 저하

  • 데이터 조회 시 조인을 유발하여 CPU와 메모리를 많이 사용
    • 반정규화로 해결 가능
    • 조인이 발생하더라도 인덱스를 사용하여 조인 연산을 수행하면 성능 상 단점이 거의 없음
    • 정규화를 통해 필요한 인덱스의 수를 줄일 수 있음

 

'공부 > SQLD' 카테고리의 다른 글

[SQLD] 대용량 데이터에 따른 성능  (0) 2023.10.22
[SQLD]★반정규화★  (0) 2023.10.22
[SQLD] 성능 데이터 모델링  (0) 2023.10.18
[SQLD] 식별자  (0) 2023.10.17
[SQLD] 관계 (Relationship)  (0) 2023.10.17