데이터베이스 용어 및 개념으로 정규화는 데이터베이스 설계에서 중복을 줄이고 데이터의 일관성과 무결성을 유지하기 위한 과정입니다.
이 글에서는 비정규화 된 데이터를 예시로 1NF부터 BCNF까지의 정규화 과정을 기록합니다.
목차
전제조건(시작조건) 데이터는 비정규화된 데이터 (Unnormalized Data)로 아래 표와 같습니다.
사원ID | 부서 | 부서 위치 | 프로젝트 |
1 | IT | 서울 | 프로젝트A, 프로젝트B |
2 | HR | 부산 | 프로젝트C |
3 | IT | 서울 | 프로젝트A, 프로젝트D |
제 1 정규형 (1NF)
각 컬럼(필드)의 값이 원자값(Atomic Value)이어야 합니다.
즉, 하나의 셀에는 하나의 값만 들어가야 합니다.
문제점 (1NF 위반)
프로젝트 컬럼에 여러 값이 포함되어 있습니다(프로젝트A, 프로젝트B 등).
1NF 적용 방법
중첩된 데이터를 행(row)으로 분리하여 각 셀에 하나의 값만 포함되도록 변환합니다.
1NF 적용 결과
사원ID | 부서 | 부서 위치 | 프로젝트 |
1 | IT | 서울 | 프로젝트A |
1 | IT | 서울 | 프로젝트B |
2 | HR | 부산 | 프로젝트C |
3 | IT | 서울 | 프로젝트A |
3 | IT | 서울 | 프로젝트D |
제 2 정규형 (2NF)
2NF 조건
- 1NF를 만족해야 합니다.
- 기본 키의 일부에만 종속된 속성(Partial Dependency; 부분함수종속이라고도 함)이 없어야 합니다.
- 기본 키가 복합 키일 때, 속성이 기본 키의 일부에만 의존하면 안 됩니다.
2NF 적용 결과
사원 ID와 부서 정보
사원ID | 부서 | 부서 위치 |
1 | IT | 서울 |
2 | HR | 부산 |
3 | IT | 서울 |
사원 ID와 프로젝트 정보
사원ID | 프로젝트 |
1 | 프로젝트A |
1 | 프로젝트B |
2 | 프로젝트C |
3 | 프로젝트A |
3 | 프로젝트D |
제 3 정규형 (3NF)
3NF 조건
- 2NF를 만족해야 합니다.
- 이행적 종속(Transitive Dependency)이 없어야 합니다.
- A → B → C의 관계에서, A가 C를 간접적으로 결정하면 안 됩니다.
3NF 적용 결과
부서와 위치 정보
부서 | 부서위치 |
IT | 서울 |
HR | 부산 |
사원 ID와 부서 정보
사원ID | 부서 |
1 | IT |
2 | HR |
3 | IT |
4 | HR |
사원 ID와 프로젝트 정보
사원ID | 프로젝트 |
1 | 프로젝트A |
2 | 프로젝트B |
3 | 프로젝트C |
4 | 프로젝트A |
보이스-코드 정규형 (BCNF)
BCNF 조건
- 모든 결정자(Determinant)는 반드시 후보 키(Candidate Key)여야 합니다.
위 조건에서는 BCNF 에 위반되지 않지만, 해당 정규형을 알려면 결정자와 후보키에 대해 이해하고 있어야합니다.
후보키는 각 row를 고유하게 식별할 수 있도록 하는 컬럼(집합)을 말하며, A가 B를 고유하게 결정하면 A는 B의 결정자 라고 합니다.
- 후보 키: "이 속성으로 행을 고유하게 찾을 수 있을까?"
- 결정자: "이 속성이 다른 속성 값을 고유하게 결정할까?"
정규화를 통해 데이터 중복과 이상 현상을 방지할 수 있습니다.
하지만 실무에서는 비정규화를 통해 성능을 최적화해야 할 수도 있습니다.
예를들어 상황에 따라서 정규화를 할수록 조인을 통한 연산을 해야함으로 성능이 떨어지는 경우도 생기기 때문입니다.
그 반대로 하는 경우를 반정규화(비정규화) 라고 합니다.
'Develop' 카테고리의 다른 글
React18 설치 및 시작 방법 및 레퍼런스링크 (1) | 2024.12.05 |
---|---|
shell 을 배우자 (0) | 2024.11.20 |
pytest로 이해하는 팩토리함수 (1) | 2024.11.16 |
메시징 애플리케이션의 시스템 디자인에 관한 글을 읽고 정리 (3) | 2024.11.08 |
Vercel 404 오류 해결하기 - 간단한 Rewrite 설정 (1) | 2024.10.08 |