데이터베이스 정규화와 이상현상
데이터베이스 정규화는 데이터 중복을 최소화하고 무결성을 보장하기 위한 단계적 과정이며, 이상현상은 정규화되지 않은 데이터베이스에서 발생하는 삭제, 삽입, 갱신 관련 문제점이다.
데이터베이스 정규화(Database Normalization)
정규화는 관계형 데이터베이스 설계에서 데이터의 중복을 최소화하고 일관성과 무결성을 유지하기 위한 체계적인 접근 방법이다. 정규화는 단계별로 진행되며, 각 단계는 이전 단계의 정규형을 만족해야 다음 단계로 진행할 수 있다.
제1정규형(1NF) - 원자 값으로 분리
제1정규형은 테이블의 모든 속성이 원자 값(Atomic Value)만을 가져야 한다는 규칙이다.
- 원자 값: 더 이상 분해할 수 없는 단일 값
- 특징: 반복 그룹이나 다중 값 속성을 허용하지 않음
- 목적: 데이터의 기본적인 구조화를 통해 검색과 수정을 용이하게 함
[1NF 적용 전]
학생ID | 이름 | 수강과목
---------------------------
1001 | 김철수 | 수학, 영어, 과학
[1NF 적용 후]
학생ID | 이름 | 수강과목
---------------------------
1001 | 김철수 | 수학
1001 | 김철수 | 영어
1001 | 김철수 | 과학
제1정규형은 테이블 설계의 가장 기본적인 단계로, 모든 속성이 단일 값을 가지도록 하여 데이터의 원자성을 보장한다.
제2정규형(2NF) - 부분함수종속 제거
제2정규형은 제1정규형을 만족하면서 모든 비주요 속성이 기본키에 완전 함수 종속되어야 한다는 규칙이다.
- 부분함수종속: 복합키의 일부 속성에만 종속되는 관계
- 특징: 기본키가 복합키일 때 의미가 있음
- 목적: 데이터 중복을 줄이고 갱신 이상을 방지
[2NF 적용 전]
학생ID | 과목코드 | 학생이름 | 과목명
----------------------------------
1001 | C123 | 김철수 | 데이터베이스
1001 | C124 | 김철수 | 알고리즘
1002 | C123 | 이영희 | 데이터베이스
[2NF 적용 후]
학생 테이블:
학생ID | 학생이름
----------------
1001 | 김철수
1002 | 이영희
수강 테이블:
학생ID | 과목코드 | 과목명
------------------------
1001 | C123 | 데이터베이스
1001 | C124 | 알고리즘
1002 | C123 | 데이터베이스
💡 부분함수종속 예시: (학생ID, 과목코드)가 기본키일 때, 학생이름은 학생ID에만 종속되므로 부분함수종속이다.
제3정규형(3NF) - 이행함수종속 제거
제3정규형은 제2정규형을 만족하면서 모든 비주요 속성이 기본키에 이행적으로 종속되지 않아야 한다는 규칙이다.
- 이행함수종속: A→B이고 B→C일 때 A→C가 성립하는 관계
- 특징: 비주요 속성 간의 종속 관계를 제거
- 목적: 데이터의 논리적 독립성을 높이고 갱신 이상을 방지
[3NF 적용 전]
학생ID | 학과코드 | 학과명
------------------------
1001 | D01 | 컴퓨터공학
1002 | D02 | 전자공학
1003 | D01 | 컴퓨터공학
[3NF 적용 후]
학생 테이블:
학생ID | 학과코드
---------------
1001 | D01
1002 | D02
1003 | D01
학과 테이블:
학과코드 | 학과명
---------------
D01 | 컴퓨터공학
D02 | 전자공학
⚡ 이행함수종속 예시: 학생ID → 학과코드 → 학과명의 관계에서 학생ID → 학과명은 이행함수종속이다.
보이스/코드 정규형(BCNF) - 결정자가 모두 후보 키인 경우
BCNF는 제3정규형을 만족하면서 모든 결정자가 후보키여야 한다는 규칙이다.
- 결정자: 함수 종속성에서 다른 속성을 결정하는 속성
- 특징: 제3정규형보다 더 엄격한 조건을 요구
- 목적: 함수 종속성으로 인한 이상현상을 완전히 제거
[BCNF 적용 전]
학생ID | 과목코드 | 교수
------------------------
1001 | C123 | 김교수
1002 | C123 | 김교수
1003 | C124 | 이교수
(여기서 교수는 과목코드를 결정하지만, 후보키가 아님)
[BCNF 적용 후]
교수_과목 테이블:
교수 | 과목코드
---------------
김교수 | C123
이교수 | C124
학생_과목 테이블:
학생ID | 과목코드
---------------
1001 | C123
1002 | C123
1003 | C124
BCNF는 모든 결정자가 후보키가 되도록 함으로써 데이터의 중복과 이상현상을 최소화하는 강력한 정규형이다.
제4정규형(4NF) - 다치종속 제거
제4정규형은 BCNF를 만족하면서 다치종속(Multi-valued Dependency)을 제거한 정규형이다.
- 다치종속: 하나의 속성 값이 여러 개의 독립적인 속성 값을 결정하는 관계
- 특징: 다치종속이 없거나, 다치종속인 경우 함수종속이 아닌 것을 제거
- 목적: 독립적인 다치관계로 인한 데이터 중복 제거
제5정규형(5NF) - 조인종속 제거
제5정규형은 제4정규형을 만족하면서 조인종속(Join Dependency)을 제거한 정규형이다.
- 조인종속: 테이블이 여러 개의 작은 테이블로 무손실 분해되고 다시 조인으로 복원 가능한 관계
- 특징: 조인종속이 없거나, 후보키를 통하지 않은 조인종속을 제거
- 목적: 테이블 분해와 조인 연산의 정확성 보장
제4정규형과 제5정규형은 실무에서 자주 사용되지 않지만, 특수한 상황에서 데이터 중복을 더욱 최소화하는 데 도움이 된다.
정규화 과정의 중요 사항
정규화는 반드시 순차적으로 진행해야 한다. 1NF → 3NF와 같이 중간 단계를 건너뛰는 것은 불가능하다. 각 단계는 이전 단계의 조건을 모두 만족해야 하며, 단계별로 테이블을 분리하는 과정을 거쳐야 한다.
정규화 순서: 1NF → 2NF → 3NF → BCNF → 4NF → 5NF
💡 정규화의 목적은 데이터 중복을 최소화하고, 데이터 무결성을 유지하며, 이상현상을 방지하는 것이다.
데이터베이스 이상현상(Anomaly)
이상현상은 데이터베이스 설계가 잘못되었을 때 발생하는 데이터 불일치 문제를 말한다. 주로 정규화되지 않은 테이블에서 발생하며, 크게 삭제 이상, 삽입 이상, 갱신 이상으로 구분된다.
삭제 이상(Deletion Anomaly) - 정보 손실
삭제 이상은 데이터를 삭제할 때 의도하지 않은 정보까지 함께 손실되는 현상이다.
- 원인: 테이블에 여러 종류의 정보가 혼합되어 있을 때 발생
- 예시: 200번 학생이 ‘C123’ 과목 번호와 3학년이라는 정보를 함께 가지고 있을 때, ‘C123’ 등록을 취소하면 3학년이라는 정보도 함께 삭제됨
- 해결방법: 테이블을 적절히 분리하여 정규화
[삭제 이상 발생 테이블]
학생ID | 과목번호 | 학년
----------------------
200 | C123 | 3
200 | C124 | 3
300 | C123 | 2
(C123 과목을 취소하면 200번 학생의 학년 정보도 사라질 수 있음)
⚡ 삭제 이상은 한 튜플의 삭제가 관련 없는 다른 정보의 손실을 가져오는 심각한 문제를 일으킬 수 있다.
삽입 이상(Insertion Anomaly) - 정보 강제 삽입
삽입 이상은 데이터를 삽입할 때 불필요한 정보까지 함께 입력해야 하는 현상이다.
- 원인: 테이블 구조상 필수 속성이 아닌 정보도 함께 입력해야 할 때 발생
- 예시: 과목 번호가 기본키일 때, 600번 학생이 2학년이라는 사실을 삽입하려면 어떤 과목 번호를 등록해야만 함
- 해결방법: 테이블을 분리하여 정규화
[삽입 이상 발생 테이블]
과목번호 | 학생ID | 학년
----------------------
C123 | 200 | 3
C124 | 300 | 2
(600번 학생의 학년 정보만 저장하려면 과목번호도 필수로 입력해야 함)
💡 삽입 이상은 불필요한 데이터 입력을 강제하거나, 데이터 입력 자체를 불가능하게 만들 수 있다.
갱신 이상(Update Anomaly) - 정보의 모순성
갱신 이상은 데이터 수정 시 일부만 변경되어 데이터 불일치가 발생하는 현상이다.
- 원인: 동일한 데이터가 여러 튜플에 중복되어 있을 때 발생
- 예시: 400번 학생의 튜플이 4개 있을 때, 학년을 4에서 3으로 하나만 변경하면 불일치 발생
- 해결방법: 테이블을 분리하여 정규화
[갱신 이상 발생 테이블]
학생ID | 과목번호 | 학년
----------------------
400 | C123 | 4
400 | C124 | 4
400 | C125 | 4
400 | C126 | 4
(한 튜플만 수정하면 400번 학생의 학년 정보가 불일치하게 됨)
갱신 이상은 데이터의 일관성을 해치는 심각한 문제로, 동일한 정보가 여러 곳에 중복되어 있을 때 발생한다.
정규화와 이상현상의 관계
정규화는 이상현상을 방지하기 위한 체계적인 방법이다. 각 정규형은 특정 유형의 이상현상을 해결하는 데 초점을 맞추고 있다.
- 제1정규형(1NF): 반복 그룹으로 인한 기본적인 이상현상 해결
- 제2정규형(2NF): 부분 함수 종속으로 인한 이상현상 해결
- 제3정규형(3NF): 이행 함수 종속으로 인한 이상현상 해결
- BCNF: 결정자가 후보키가 아닌 경우의 이상현상 해결
정규화를 통해 테이블을 적절히 분리하면 데이터 중복이 줄어들고, 그 결과 이상현상도 방지할 수 있다.
데이터베이스 정규화는 데이터의 중복을 최소화하고 무결성을 보장하는 중요한 과정이다. 이상현상을 이해하고 적절한 정규화를 통해 이를 방지함으로써 효율적이고 안정적인 데이터베이스를 설계할 수 있다.
댓글남기기