데이터베이스 정규화
in Database
정규화에 대해 알아봅시다.
DB 설계부터 운영 및 유지보수까지 전 단계에서 필요한 정규화에 대해 정리하기
정규화
하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정 입니다.
중복된 데이터를 최소화 함으로써 데이터의 무결성을 지키는 방법입니다.
1차 정규화 (1NF)
테이블 컬럼의 원자 값(Atomic Value: 하나의 값)을 갖도록 분해합니다.
아래 테이블을 1차 정규화 작업을 해보자!
이름 | 취미 |
---|---|
김철수 | 영화, 독서 |
김영희 | 게임, 음악 |
2차 정규화 (2NF)
제 1 정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해합니다.
아래의 테이블을 2차 정규화 작업 해보자!
학생 번호 | 이름 | 소속학과 | 강의실 |
---|---|---|---|
101 | 김철수 | 컴퓨터과 | A동 101호 |
102 | 김영희 | 경제학과 | B동 103호 |
201 | 마진호 | 컴퓨터과 | A동 101호 |
3차 정규화 (3NF)
제 2 정규형을 만족하고, 이행적 함수 종속을 없애도록 분해합니다.
(이행적 함수 종속: A → B, B → C, A → C 인 관계)
아래의 테이블을 3차 정규화 작업 해보자!
학생 번호 | 소속학과 | 수강료 |
---|---|---|
101 | 심리학과 | 10,000 |
102 | 심리학과 | 10,000 |
201 | 컴퓨터학과 | 15,000 |
BCNF 정규화
제 3 정규형을 만족하고, 모든 결정자가 후보키가 되도록 테이블을 분해합니다.
아래의 테이블을 3차 정규화 작업 해보자!
학생 번호 | 강의명 | 교수 |
---|---|---|
101 | 심리학 | 김교수 |
102 | 심리학 | 김교수 |
201 | 컴퓨터과학 | 이교수 |
🥸 위 문제를 해결을 한다면?
학생 번호 | 과목 코드 |
---|---|
101 | DS01 |
102 | DS01 |
201 | CS01 |
반정규화 (역정규화)
반정규화는 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능 향상과 개발과 운영의 단순화를 위해,
중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미합니다.
🗣️ 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위한 정규화된 데이터 모델에서
중복, 통합, 분리를 수행하는 모든 과정을 의미합니다.
반정규화를 할때는?
- 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나
- 경로가 너무 멀어 조인으로 인한 성능저하가 예상 되거나,
- 컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우
반정규화 절차
반정규화 대상 조사
- 범위처리 빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
다른 방법유도 검토
- 뷰(VIEW) 테이블
- 클러스터링 적용
- 인덱스의 조정
- 응용 애플리케이션
반정규화 적용
- 테이블 반정규화
- 속성의 반정규화
- 관계의 반정규화