데이터 정규화에 대해 알아보도록 하겠습니다. 정규화는 관계형 데이터베이스에서 중복 데이터를 없애고 불필요한 데이터를 제거하며 효과적으로 데이터 관리를 할 수 있는 데이터 관리 방식입니다. 이 정규화는 성능과도 밀접한 관련이 있습니다. 불필요한 관계를 줄임으로 인해 특정 테이블들의 조인이 줄어들 수 있고 조회하는 데이터의 범위도 줄어들 수 있습니다. 오라클의 데이터 정규화는 총 6단계로 진행이 됩니다.
제1정규화
제1정규화는 관계형 데이터베이스에서 데이터의 중복을 제거하고 원자 값으로 만드는 절차입니다. 하나의 테이블에는 중복되는 데이터가 없어야 하며 각 칼럼이 한 개의 값만 포함하도록 구성하는 게 원칙입니다. 중복된 데이터가 있는 경우 다른 테이블로 데이터를 분리해야 합니다. 기존에 중복이 발생하고 있던 테이블에는 외래키를 생성하고 신규로 분리한 테이블에는 기본키로 데이터 만들어두고 데이터를 연결합니다. 제1정규화를 하게 되면 중복된 데이터가 없으면 데이터 변경 시에 하나만 데이터를 바꿔주면 되고 직관성이 생기며 유지보수하기가 편해집니다.
제2정규화
제2정규화는 테이블을 두 번째 단계로 정규화하는 과정이며 테이블의 데이터를 더욱 세분화하여 데이터 중복을 최소화합니다. 기본키에 대해 완전 함수 종속성을 지니는지 확인해야 하는데 완전 함수 종속성이란 기본키와 연관이 있는 테이블칼럼에 대한 데이터라고 볼 수 있습니다. 데이터를 조회할 때 기본키로 다른 테이블의 열을 참조하지 않게 하나의 테이블에 두는 것을 의미합니다. 제2정규화를 진행하면 데이터 수정 시 기본키와 다른 열들의 관계 유지가 쉬워지며 중복 수정을 피할 수 있습니다. 그리고 기본키의 일부분으로 다른 열의 값을 유일하게 식별 가능합니다. 예를 들어 사원정보 테이블에 사원번호, 사원명, 사원상태코드, 사원상태 값이 있을 때 사원상태는 사원상태코드에만 의존하도록 되어 있습니다. 이럴 때는 사원상태코드, 사원상태의 값을 가지는 별도의 테이블을 만들어 사원정보 테이블에서 상태코드나 사원상태가 변경이 될 때 중복적으로 변경하는 것을 막을 수 있습니다.
제3정규화
제3정규화는 테이블을 세 번째 단계로 정규화하는 과정이며 제2정규화된 상태에서 더욱 세분화하여 기본키가 아닌 다른 열이나 열집합에 종속되도록 해야 합니다. 모든 기본키가 아닌 열이 기본키에 대해 이행적 함수 종속성 특성을 가지지 않아야 하고 이행적 함수 종속성 특징을 가지고 있다면 별도의 테이블로 분리를 하여야 합니다. 제3정규화는 세부정보를 별도의 테이블에 나열해서 관리하는 개념입니다. 데이터를 세분화해서 중복을 최소화하고 일관성 유지, 칼럼 사이의 관계를 유지할 수 있습니다.
제4정규화
제4정규화는 테이블을 네 번째 단계로 정규화하는 과정이며 제3정규화된 테이블에서 기본키가 아닌 칼럼이 여러 중복되는 값을 가지는 것을 별도의 테이블로 분리해서 관리합니다. 예를 들어 고객이 여러 개의 이메일 정보를 가지고 있으면 이메일에 대한 정보를 별도의 테이블로 구성해서 분리합니다. 제4정규화는 테이블 간의 관계 설정 시 조인을 테이블을 사용합니다. 조인 테이블은 관계가 있는 두 개 이상의 테이블에 대해 칼럼을 조합해서 생성하는 테이블을 말합니다. 제4정규화는 때에 따라 데이터 중복이 발생할 수 있고 테이블들의 관계가 복잡해질 수 있으므로 데이터베이스 성능을 고려해서 적용할지를 결정해야 합니다.
제5정규화
제5정규화는 테이블을 다섯 번째 단계로 정규화하는 과정이며 테이블 간의 독립성을 최대화하는 방법입니다. 제4정규화된 테이블에서 조인 종속성을 제거하고 각각 독립된 테이블로 분리하여 관리합니다. 그러기 위해서는 테이블에 대한 관계의 이해도가 높아야 적절하게 분리를 할 수 있습니다. 제5정규화도 제4정규화와 마찬가지로 데이터 중복이 발생할 수 있고 테이블 간의 관계도 복잡해질 수 있습니다. 이에 따라 제5정규화는 규모가 큰 데이터베이스에 주로 적용이 되며 소규모 데이터베이스는 거의 필요하지 않은 과정입니다. 제3정규화까지 적용 후 필요에 따라 제4정규화, 제5정규화를 적절히 적용시키는 게 중요하며 제5정규화를 적용할 때는 충분한 데이터베이스 성능과 유지보수 등을 신중하게 결정하여 적용하여야 합니다.
제6정규화
제6정규화는 테이블을 여 번째 단계로 정규화하는 과정이며 제5정규화된 테이블에 다중값 종속성을 제거하여 테이블 독립성을 극대화시키는 방법입니다. 다중값 종속성은 다수의 속성들이 함께 조합되어 다른 테이블에 영향을 주는 종속성을 말합니다. 예를 들어 수강신청을 할 때 사용자가 여러 과목을 동시에 수강신청하게 되면 여러 개의 중복 데이터가 발생하며 데이터의 정확성이 저하됩니다. 이런 다중값 종속성을 제거하고 독립된 테이블로 분리합니다. 제6정규화도 제5정규화와 마찬가지로 소규모 데이터베이스는 제6정규화가 필요하지 않을 수도 있습니다. 일반적으로 제6정규화는 대규모 데이터베이스에서 많이 사용하며 데이터 정합성을 위해 제6정규화를 적용 시에는 제약조건이 추가적으로 필요합니다. 제6정규화를 적용 시에는 테이블 간의 관계도를 잘 이해하고 데이터의 중복을 최소한으로 줄이는 게 좋습니다.
마무리
지금까지 데이터 정규화에 대해 살펴봤습니다. 정규화를 통해 데이터의 중복을 최소화하고 관계를 재정의 하며 데이터베이스의 효율을 극대화할 수 있습니다. 정규화를 진행하기 위해서는 무엇보다도 테이블 관계, 데이터의 흐름의 이해도가 높아야 하며 시스템이 가고자 하는 방향에 맞는지 잘 선택해서 정규화를 진행해야 합니다.
'IT정보' 카테고리의 다른 글
오라클 아키텍처 (0) | 2023.05.01 |
---|---|
오라클에 관하여 (0) | 2023.04.30 |
오라클 조인 서브쿼리 (0) | 2023.04.28 |
ORACLE 내부함수(문자열, 날짜, 변환, 숫자) (0) | 2023.04.27 |
오라클 GROUP BY, HAVING, 그룹함수 (0) | 2023.04.26 |
댓글