1. 정규화(Normalization)
-
정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 벙법이며, 데이터를 분해하는 과정
-
데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
-
정규화를 수행하면 비즈니스에 변화가 발생해도 데이터 모델의 변경을 최소화 할 수 있음
-
제1정규화부터 제5정규화까지 있음(실질적으로는 제3정규화까지만 수행)
-
정규화가 이루어지지 않으면 이상현상이 발생함
*이상현상(Anomaly): 데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상(하나의 릴레이션에 두 개 이상의 실체의 속성들을 혼합하여, 즉 정규화 되지 않은 경우 데이터의 중복이 원인이 되어 발생함)
-
정규화된 모델은 테이블이 분해됨(조인을 통해 하나의 합집합으로 만들 수도 있음)
-
정규화 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거 됨
*정규화 절차
-
제1정규화: 속성의 원자성을 확보(모든 도메인이 원자값), 기본키를 설정
-
제2정규화: 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거함
-
제3정규화: 기본키를 제외한 칼럼 간에 종속성을 제거함, 이행 함수 종속성을 제거
-
BCNF: 기본키를 제외하고 후보키가 있는 경우(모든 결정자가 후보키), 후보키가 기본키를 종속시키면 분해됨
-
제4정규화: 여러 칼럼들이 하나의 칼람을 종속시키는 경우 분해하여 다중값 종속성을 제거(다치종속 제거)
-
제5정규화: 조인에 의해서 종속성이 발생되는 경우 분해
2. 함수적 종속성(Functional Dependency)
(1) 제1정규화
-
함수적 종속성을 근거로 기본키를 잡음
-
모든 도메인이 원자 값으로만 되어 있음
-
속성을 보고 유일성을 만족할 수 있는지 확인
-
한 개의 속성으로 만족이 안되면 2개의 조합으로 유일성을 만족시킬 수 있는지 확인
(2) 제2정규화
-
부분 함수 종속성이란, 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생함
-
기본키가 하나의 칼럼으로 이루어지면 제2정규화는 생략함
(3) 제3정규화
-
이행 함수 종속성을 제거함
-
이행 함수 종속성이란, 기본키를 제외하고 칼럼간에 종속성이 발생하는 것
-
제1정규화와 제2정규화를 수행한 다음에 해야함
(4) BCNF(Boyce-Codd Normal Form)
-
복수의 후보키가 있고 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 함
1. 정규화의 문제점
-
정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높임
-
정규화는 데이터 조회(select) 시에 조인을 유발하기 때문에 CPU와 메모리를 많이 사용함
-
반정규화를 하여 하나의 테이블에 저장하면 조인을 통한 성능 저하는 해결 가능함
2. 정규화를 사용한 성능 튜닝
-
조인으로 인해 성능이 저하되는 문제를 반정규화로 해결
-
반정규화는 데이터를 중복시키기 때문에 또 다른 문제점 발생시킴
-
정규화는 입출력 데이터의 양을 줄여서 성능을 향상시킴
'SQL 공부' 카테고리의 다른 글
(SQLD)관계형데이터베이스(Relation Database)/SQL 종류 (0) | 2020.08.07 |
---|---|
(SQLD)반정규화(De-Normalization)/분산 데이터베이스 (0) | 2020.08.06 |
(SQLD)관계(Relationship)/엔터티 식별자 (0) | 2020.08.02 |
(SQLD)엔터티(Entity)/속성(Attribute) (0) | 2020.07.31 |
(SQLD)데이터 모델링/3층 스키마 (0) | 2020.07.29 |