데이터베이스 정규화와 이상, 그리고 정규화 단계별 예제
데이터베이스 설계의 핵심은 데이터를 효율적으로 관리하고, 무결성을 유지하며, 중복을 최소화하는 것입니다. 이를 위해 사용하는 방법이 **정규화(Normalization)**입니다. 이번 글에서는 정규화의 개념, 데이터 비효율로 인해 발생할 수 있는 이상(Anomalies), 그리고 **정규화의 단계별 과정(1NF ~ 6NF)**을 상세한 예시와 함께 다룹니다
1. 데이터베이스 정규화란?
정규화는 관계형 데이터베이스를 설계할 때 중복 데이터를 줄이고, 데이터 무결성을 유지하며, 효율적인 데이터 관리를 목표로 데이터를 구조화하는 과정입니다.
핵심 목표:
- 데이터 중복 최소화
- 데이터 무결성 유지
- 이상(Anomalies) 방지
2. 데이터베이스 이상의 개념과 종류
데이터베이스 설계가 적절하지 않을 경우, 삽입 이상, 삭제 이상, 갱신 이상과 같은 문제(이상)가 발생할 수 있습니다.
2.1 삽입 이상 (Insertion Anomaly)
새로운 데이터를 삽입할 때 불필요한 정보를 함께 저장해야 하는 문제입니다.
학생ID | 이름 | 학과명 | 학과장 |
---|---|---|---|
1 | 홍길동 | 컴퓨터학과 | 김교수 |
문제점: 새로운 학과(예: 전기공학과)를 추가하려면, 학과장이 없는 상태에서도 '학생ID'와 '이름' 데이터를 함께 입력해야 합니다.
2.2 삭제 이상 (Deletion Anomaly)
데이터를 삭제할 때 의도치 않게 다른 중요한 정보도 삭제되는 문제입니다.
학생ID | 이름 | 학과명 | 학과장 |
---|---|---|---|
1 | 홍길동 | 컴퓨터학과 | 김교수 |
문제점: '홍길동'의 데이터를 삭제하면, 컴퓨터학과의 학과장 정보도 함께 사라집니다.
2.3 갱신 이상 (Update Anomaly)
중복된 데이터 중 일부만 수정되어 데이터 불일치가 발생하는 문제입니다.
학생ID | 이름 | 학과명 | 학과장 |
---|---|---|---|
1 | 홍길동 | 컴퓨터학과 | 김교수 |
2 | 김영희 | 컴퓨터학과 | 김교수 |
문제점: 학과장이 변경되었을 때(예: 이교수), 일부 데이터만 갱신하면 불일치가 발생합니다.
3. 정규화 단계별 설명과 예제
정규화는 데이터를 구조화하기 위한 여러 단계로 이루어져 있으며, 단계가 높아질수록 데이터 중복과 이상이 감소합니다.
3.1 제1정규형 (1NF)
조건: 모든 컬럼 값이 원자값(Atomic Value)을 가져야 합니다.
예시 변환 과정:
주문ID | 고객명 | 연락처 | 상품명 |
---|---|---|---|
1 | 홍길동 | 010-1234-5678 | 사과, 바나나 |
2 | 김영희 | 010-5678-1234 | 딸기, 포도, 배 |
변환 후:
주문ID | 고객명 | 연락처 | 상품명 |
---|---|---|---|
1 | 홍길동 | 010-1234-5678 | 사과 |
1 | 홍길동 | 010-1234-5678 | 바나나 |
2 | 김영희 | 010-5678-1234 | 딸기 |
2 | 김영희 | 010-5678-1234 | 포도 |
2 | 김영희 | 010-5678-1234 | 배 |
3.2 제2정규형 (2NF)
조건: 제1정규형을 만족하고, 부분 종속(Partial Dependency)을 제거해야 합니다.
예시 변환 과정:
변환 전:
주문ID | 상품ID | 상품명 | 고객명 |
---|---|---|---|
1 | 101 | 사과 | 홍길동 |
1 | 102 | 바나나 | 홍길동 |
2 | 103 | 딸기 | 김영희 |
2 | 104 | 포도 | 김영희 |
변환 후:
주문ID | 고객명 |
---|---|
1 | 홍길동 |
2 | 김영희 |
상품ID | 상품명 |
---|---|
101 | 사과 |
102 | 바나나 |
103 | 딸기 |
104 | 포도 |
3.3 제3정규형 (3NF)
조건: 제2정규형을 만족하고, 이행적 종속(Transitive Dependency)이 없어야 합니다.
예시 변환 과정:
변환 전:
학생ID | 이름 | 학과ID | 학과명 |
---|---|---|---|
1 | 홍길동 | 101 | 컴퓨터학과 |
2 | 김영희 | 102 | 기계공학과 |
변환 후:
학생ID | 이름 | 학과ID |
---|---|---|
1 | 홍길동 | 101 |
2 | 김영희 | 102 |
학과ID | 학과명 |
---|---|
101 | 컴퓨터학과 |
102 | 기계공학과 |
3.4 BCNF (Boyce-Codd Normal Form)
조건: 제3정규형을 만족하며, 모든 결정자가 후보 키여야 합니다.
3.5 제4정규형 (4NF)
조건: 다치 종속(Multi-Valued Dependency) 제거
3.6 제5정규형 (5NF)
조건: 조인 종속(Join Dependency) 제거
3.7 제6정규형 (6NF)
조건: 무손실 분해(Lossless Decomposition)
'개발 부트캠프 > 데이터베이스' 카테고리의 다른 글
[DB] 스토어드 프로시저(Stored Procedure) (0) | 2024.12.02 |
---|---|
[DB] 인덱스(Index) (0) | 2024.12.02 |
[DB] SQL 성능 확인 (0) | 2024.12.02 |
[DB] ERD (2) | 2024.11.27 |
[DB] 데이터베이스 = 파일이다. (0) | 2024.11.27 |