데이터베이스의 정규화에 대해서 알아보도록 하겠습니다.
목차
데이터베이스 정규화
먼저, 조금 딱딱할 수 있는 이론을 살펴보도록 하겠습니다.
데이터베이스 정규화란, 데이터베이스의 설계를 잘못하면 중복 데이터나 일관성 없는 데이터 등으로 인해 데이터의 무결성(Integrity)을 해치는 문제가 발생할 수 있는데 이를 해결할 수 있는 방법 중 하나입니다.
데이터베이스 정규화는 이러한 문제를 해결하기 위해 테이블의 구조를 재조정하는 과정입니다. 테이블을 여러 개의 작은 테이블로 분할하거나, 테이블의 칼럼들을 조정하는 등의 작업이 이루어집니다.
데이터베이스 정규화는 일반적으로 1차 정규화, 2차 정규화, 3차 정규화, BCNF 정규화 4차 정규화, 5차 정규화 단계로 나뉘어 집니다. 각 단계는 이전 단계를 기반으로 하여 테이블의 구조를 더욱 정규화하는 것을 의미합니다.
1차 정규화는 테이블의 컬럼들을 원자적(Atomic)인 값으로 구성하도록 하는 것입니다. 즉, 하나의 칼럼에 여러 개의 값이 들어가지 않도록 하여 중복을 방지합니다.
2차 정규화는 부분 함수 종속성(Partial functional dependency)을 제거하는 것입니다. 이는 테이블에서 기본 키가 아닌 다른 칼럼들이 기본 키의 일부에 의존하도록 하는 것을 말합니다.
3차 정규화는 이행적 함수 종속성(Transitive functional dependency)을 제거하는 것입니다. 이는 테이블에서 컬럼들 사이의 의존성이 불필요하게 복잡하게 얽혀 있는 경우를 의미합니다.
BCNF 정규화는 다치 종속성(Multi-valued dependency)을 제거하는 것을 의미합니다. 이는 테이블에서 한 컬럼의 값이 다른 칼럼의 값에 영향을 주는 경우를 말합니다.
이러한 정규화 과정을 통해 데이터베이스의 구조를 더욱 단순화하고, 중복 데이터나 일관성 없는 데이터를 방지하여 데이터의 무결성을 보장할 수 있게 됩니다.
정규화 목적
목적 | 설명 |
이상현상 제거 | 고려되지 않은 삽입, 갱신, 삭제에 따른 이상현상 제거 |
효율성 향상 | 새로운 자료형이 나타날 경우, 관계들의 집합의 재구성의 필요성을 낮추고 응용 프로그램의 생명주기 연장 |
확장성 향상 | 관계 모델의 의미를 명확하게 부여하고 추가적인 관계 모델로의 확장성 향상 |
정규화 원칙
구분 | 설명 |
정보의 무손실 | 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함하고 있어야 함 |
데이터 중복성 감소 | 중복으로 인한 이상 현상 제거 |
분리의 원칙 | 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리하여 표현 |
정규화 절차 - 도부이결다조
1차 정규화
1차 정규화는 반복되는 속성을 제거하며 모든 도메인이 원자값만 되어 있는 경우를 말합니다.
위 테이블을 살펴보면 연락처의 값이 2개씩 들어가 있는 경우가 존재합니다. 원자성을 위반한 경우입니다.
1차 정규화를 진행하여 도메인에 원자값으로 되어 있도록 고객 테이블과 고객정보 테이블을 분리하였습니다. 연락처에 있던 속성값들이 여러 행으로 나누어져 입력되었습니다.
위 테이블은 과목 1 점수 과목 2 점수 과목 3 점수로 반복되는 칼럼이 존재합니다. 따라서 1차 정규화가 필요한 테이블입니다. 1차 정규화를 거처 1차 정규형이 되면 아래와 같은 2개의 테이블로 나누어지게 됩니다. 정규화 과정이 끝난 테이블을 N차 정규형이라고 할 수 있습니다.
2차 정규화
2차 정규화는 부분함수 종속성 제거를 진행합니다. 주식별자에 종속적이지 않은 속성을 분리합니다. 제1 정규화된 테이블에서 릴레이션의 기본키가 아닌 속성들이 기본키에 완전히 함수적으로 종속할 경우 진행합니다. 예시를 통해 이해를 해보도록 하겠습니다.
위 테이블을 살펴보면 (주문번호, 업장코드)가 키로 되어있습니다. 여기서 업장명은 업장코드에만 종속이 됩니다. 이때 문제가 발생합니다. 새로운 업장을 생성하고 싶을 때 주문번호가 없으면 데이터를 넣을 수가 없습니다. 이것이 삽입이상입니다.
제2 정규화를 하게 되면 위 결과와 같이 부분함수 종속성을 제거하여 모든 속성들이 주식별자에 종속적이게 나누었습니다.
3차 정규화
제3정규화는 이행함수종속을 제거해야 한다. 즉 기본키가 아닌 모든 속성관계에서는 서로 종속이 될 수 없게 해야 합니다.
위 테이블에서는 학생 ID가 기본키이지만 일반속성인 학과 ID와 학과명이 서로 종속이 됩니다. 따라서 이를 분리시키면 아래와 같이 학과명을 기본키로 하는 테이블 하나가 추가가 됩니다.
'IT경험공유 > DataBase' 카테고리의 다른 글
SQLD 48회 기출문제 복원 (0) | 2023.03.19 |
---|---|
SQLD 자격증 요약정리 [ 1과목- 데이터 모델링의 이해 ] (0) | 2023.03.16 |
DB/SQL-고급집계함수 ROLLUP, GROUPING SETS, CUBE (0) | 2023.03.14 |
[DB/SQL] 윈도우 함수 LEAD/LAG (Feat. Partition by ) (0) | 2023.03.13 |
[DB/SQL] 조인(JOIN) 사용법 INNER/OUTER/CROSS (0) | 2023.03.11 |
댓글