정규화
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 정규화를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상현상을 제거하는 것이다.
함수적 종속성과 결정자의 정의는 위의 이미지를 참고하면 이해가 쉽다.
정규화의 효과 및 장점
정규화는 데이터의 중복 속성을 제거하고 동일한 의미의 일반 속성을 하나의 테이블로 집약시키므로 한 테이블의 데이터 용량을 최소화 시키는 효과가 있다. 상호 종속성이 강한 데이터 요소들을 분리하고 독립된 개념으로 정의함에 따라 High cohesion & Loose coupling 원칙 원칙에 충실해지고 유연성을 극대화시킨다. 또, 개념을 좀 더 세분화함에 따라 해당 개념에 대한 재활용 가능성이 높아지고 중복의 최소화를 통해 저장 공간을 절약하고 데이터의 품질을 향상시킨다. DML 의 성능 또한 증가한다.
여기서 주의할 점은, 정규화를 거친 테이블은 데이터를 처리할 때 무조건 빨라지기만 하지는 않는다는 것이다. 입력/수정/삭제시에는 무조건적으로 성능이 향상되지만 데이터 조회 시에는 처리 조건에 따라 성능이 저하되는 경우도 존재하기 때문이다.
High cohesion & Loose coupling
높은 응집도 & 낮은 결합도 원칙
응집도는 하나의 클래스가 하나의 기능(책임)을 담당하고 있는 정도를 의미한다. 응집도가 높아질수록 클래스와 프로그램의 구조는 단순하고 명쾌해진다. 결합도는 클래스 간의 서로 다른 책임들이 얽혀 있는 상호 의존도의 정도를 의미한다. 결합도가 높을수록 의존도가 높아져 전체적인 가독성이 떨어지고 유지 보수가 곤란해진다. 의존성 규칙과 비슷한 목적을 지닌 원칙이라고 이해하면 되겠다.
정규화 이론
제 1 정규형
모든 속성은 원자 값을 가져야 하며, 다중 값을 가질 수 있는 속성은 분리되어야 한다.
왼쪽 테이블을 보면 취미 열에 두 가지 값이 들어가 있는 케이스가 존재한다. 이럴 경우 제 1 정규형을 위반한 것이다.
오른쪽 테이블처럼 하나의 셀에 하나의 요소만 들어갈 수 있도록 분리시켜 제 1 정규형 위반을 해소시킨다.
제 2 정규형
제 1 정규형을 만족하고 모든 Non-key 컬럼은 기본 키 전체에 종속되어야 한다. 기본 키에 종속적이지 않거나 일부 컬럼에만 종속적인 컬럼은 분리되어야 한다. 완전 함수 종속을 충족시켜야 한다고도 표현한다.
완전 함수 종속이란 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우를 의미한다.
-ref) dodo000.tistory.com/20
수강강좌 테이블에서는 학생번호와 강좌이름이 기본키 PK 값이다. 제 1 정규형을 만족하여 하나의 셀에 하나의 원자만 들어있지만, 2 정규형을 만족하기 위해서는 학생번호와 강좌이름에 의해 모든 컬럼이 종속되어야 한다. 그러나 학생번호는 강의실을 결정하지 못하고, 강좌이름은 성적을 결정하지 못하므로 완전 함수 종속이 아니다. 따라서 아래와 같이 분리하여 제 2 정규형 위반을 해소할 수 있다.
제 3 정규형
제 2 정규형을 만족하고 일반 속성들 간에도 종속 관계가 존재하지 않아야 하며, 일반 속성들 간 종속 관계가 존재하는 것들은 분리되어야 한다. 이를 직접 종속 이라고 한다. 직접 종속이란, A -> B, B -> C 가 성립할 때 A -> C 도 성립하는 함수 종속성을 의미한다.
위의 계절학기 테이블에서 학생번호와 강좌이름은 수강료를 결정지으므로 제 2 정규형을 만족하고 있으나, 학생 번호가 수강료를 직접적으로 결정짓지는 못한다. 즉, 직접 종속을 위반하고 일반 속성들 간에 종속 관계가 존재하게 되는 것이다.
따라서 직접 종속이 성립할 수 있도록 위의 모습처럼 테이블을 분리하여, 제 3 정규형 위반을 해소해야 한다.
제 4 정규화는 속성의 값이 여러 개 발생하는 다치 종속 Multi-valued dependency 를 분리하고, 제 5 정규화는 조인을 두 개 이상으로 분리하는 방식으로 진행되나 보통 제 3 정규화 까지만 진행되므로 이 과정들에 대해서는 자세하게 서술하지 않겠다.
'SQL' 카테고리의 다른 글
DML, DDL, TCL (0) | 2021.06.06 |
---|---|
성능 데이터 모델링 (0) | 2021.05.21 |
데이터 모델링의 3요소와 식별자 (0) | 2021.05.13 |
데이터 모델링 (0) | 2021.05.11 |
트랜잭션 (0) | 2021.05.11 |