데이터베이스 정규화(Normalization)와 비정규화(Denormalization)의 정의와 함께 각 기법이 어떻게 적용되는지 예시를 통해 설명하겠습니다.
1. 데이터베이스 정규화(Normalization)
정규화는 데이터베이스에서 중복을 최소화하고 데이터를 효율적으로 관리할 수 있도록 테이블을 구조화하는 과정입니다. 이 과정은 여러 단계로 나뉘며, 각 단계는 '정규형(Normal Form)'이라고 불립니다.
정규화의 목적
- 중복 제거: 같은 데이터를 여러 번 저장하지 않도록 한다.
- 데이터 무결성 유지: 잘못된 데이터가 삽입되지 않도록 한다.
- 검색 효율성 향상: 데이터를 쉽게 찾을 수 있도록 한다.
정규화 과정
- 제1정규형(1NF): 각 열에 원자 값(Atomic Value)만 포함되도록 하는 규칙입니다. 즉, 각 행의 각 열은 더 이상 분해할 수 없는 단위여야 합니다.
- 예시: 아래와 같은 비정규화된 테이블이 있다고 가정합니다.학생ID이름전화번호
1 김철수 010-1234-5678, 010-2345-6789 1 김철수 010-1234-5678 1 김철수 010-2345-6789
- 예시: 아래와 같은 비정규화된 테이블이 있다고 가정합니다.학생ID이름전화번호
- 제2정규형(2NF): 제1정규형을 만족하면서, 부분 함수 종속성을 제거하는 규칙입니다. 즉, 기본키의 일부만으로 결정되는 속성을 제거합니다.
- 예시: 학생과 과목 정보를 관리하는 테이블에서, 학생ID와 과목ID가 복합키일 때, 학생 이름은 학생ID에만 의존하므로 이를 별도의 테이블로 분리합니다.
학생 ID 과목ID 학생이름 1 101 김철수 1 102 김철수 - 학생 테이블:
학생ID 학생이름 1 김철수 - 수강 테이블:
학생ID 과목ID 1 101 1 102
- 학생 테이블:
- 예시: 학생과 과목 정보를 관리하는 테이블에서, 학생ID와 과목ID가 복합키일 때, 학생 이름은 학생ID에만 의존하므로 이를 별도의 테이블로 분리합니다.
- 제3정규형(3NF): 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것입니다. 여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미합니다.
- 예시: 학생과 학생의 주소를 저장하는 테이블이 있다고 가정할 때, 학생ID가 주소와 관계가 있을 경우, 주소 정보를 별도로 분리하여 저장해야 합니다.
학생ID 학생이름 주소 우편번호 1 김철수 서울시 강남구 12345 - 학생 테이블:
학생ID 학생이름 1 김철수 - 주소 테이블:
주소ID 주소 우편번호 1 서울시 강남구 12345 - 학생-주소 관계 테이블:
학생ID 주소ID 1 1
- 학생 테이블:
- 예시: 학생과 학생의 주소를 저장하는 테이블이 있다고 가정할 때, 학생ID가 주소와 관계가 있을 경우, 주소 정보를 별도로 분리하여 저장해야 합니다.
2. 데이터베이스 비정규화(Denormalization)
비정규화는 성능을 고려하여 일부러 데이터 중복을 허용하는 기법입니다. 비정규화된 테이블은 중복된 데이터를 저장하고 있어 데이터 무결성 측면에서는 불리하지만, 조회 성능을 높일 수 있습니다.
비정규화의 목적
- 성능 최적화: 데이터 조회 성능을 향상시키기 위해 중복된 데이터를 포함시킵니다.
- 복잡한 조인의 최소화: 여러 테이블을 조인하는 대신 하나의 테이블에서 데이터를 얻을 수 있도록 합니다.
비정규화 예시
예를 들어, 주문과 관련된 데이터를 조회하는 시스템에서 주문 정보, 고객 정보, 상품 정보가 각각 다른 테이블에 저장되어 있다고 가정합니다. 이 데이터를 조회하기 위해 여러 번의 조인 연산이 필요할 수 있습니다. 비정규화를 통해 이러한 데이터를 하나의 테이블로 합쳐 조회 성능을 향상시킬 수 있습니다.
비정규화된 테이블 예시:
주문ID | 고객이름 | 상품명 | 가격 |
1 | 김철수 | 컴퓨터 | 500,000 |
2 | 박영희 | 스마트폰 | 300,000 |
이 경우, 고객 정보나 상품 정보 테이블을 별도로 조인할 필요 없이 모든 정보를 하나의 테이블에서 바로 조회할 수 있습니다.
3. 정규화와 비정규화의 비교
항목 | 정규화 | 비정규화 |
목적 | 데이터 중복을 최소화하고 무결성 유지 | 성능 최적화 (주로 조회 성능 향상) |
장점 | 데이터 무결성, 일관성, 중복 제거 | 조회 성능 향상, 복잡한 조인 최소화 |
단점 | 조회 성능 저하 (여러 테이블을 조인해야 함) | 데이터 중복으로 인한 무결성 문제 발생 가능 |
정규화는 데이터의 중복을 제거하고 무결성을 유지하는 데 중점을 두며, 비정규화는 성능을 최적화하기 위해 중복된 데이터를 허용하는 방식입니다.
'IT 개발 라이프 > DB' 카테고리의 다른 글
트랜잭션 격리 수준(Transaction Isolation Level) (0) | 2025.01.20 |
---|---|
ORACLE(오라클) ROWNUM 함수 (0) | 2025.01.09 |
ORACLE(오라클) ROW_NUMBER() 함수 (0) | 2025.01.09 |
데이터베이스 트랜잭션(Transaction) (0) | 2024.12.31 |
데이터베이스(DB) Lock (1) | 2024.12.26 |