정규화란
데이터베이스 설계에서 테이블 간에 중복된 데이터를 허용하지 않고 무결성을 유지하기 위한 과정이다. 이는 데이터를 효과적으로 저장하고 검색하기 위해 테이블을 구조화하는 프로세스를 의미한다. 정규화는 관계형 데이터베이스에서 사용되며, 데이터의 중복을 최소화하고 각 테이블이 특정 종류의 종속성을 만족하는 데 목적을 둔다.
목적
최종 목적은 이상 현상 발생 가능성을 줄이는 것이다.
- 중복 최소화
- 데이터의 중복을 최소화하여 저장 공간을 절약하고 데이터 일관성을 유지한다.
- 데이터가 중복될 경우 수정이 필요할 때 여러 테이블에서 수정해야 하므로 문제가 될 수 있다.
- 데이터 일관성 유지
- 각 테이블이 특정 종류의 종속성을 갖도록 한다.
- 데이터의 논리적 일관성을 확보하고 변경 시 발생할 수 있는 이상 현상을 방지한다.
- 유연한 쿼리 작성
- 각 테이블이 특정 주제를 가지고 있으므로 쿼리가 명확하고 간결해진다.
- 데이터베이스 유지보수 용이성
- 변경이 발생할 때 특정 테이블만 업데이트하므로 유지보수가 용이하다.
- 데이터베이스 확장성 향상
- 새로운 데이터 요구 사항이 발생해도 간단한 수정으로 새로운 테이블을 추가하거나 수정할 수 있다.
단계
1. 제1 정규화
- 테이블의 컬럼이 하나의 값을 갖도록 테이블을 분리하는 것
2. 제2 정규화
- 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
- 완전 함수 종속: 기본키의 부분집합이 결정자가 되면 안 됨
3. 제3 정규화
- 제2 정규화를 진행한 테이블에 대해 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
- 이행적 종속: A→B, B→C가 성립할 때 A→C가 성립되는 것
4. BCNF 정규화
- 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
- 제3 정규형에 후보키가 여러 개 존재하고 이러한 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능
- 수강_교수에서 기본키는 (학번, 과목명)이다. 그리고 기본키는 담당교수를 결정하고 있다. 또한 담당교수는 과목명을 결정하고 있다.
- 담당교수가 과목명을 결정하는 결정자이지만 후보키가 아니기 때문에 BCNF 정규화를 만족시키기 위해 테이블을 분해해야 한다.
5. 제4 정규화
- BCNF를 진행한 테이블에 대해 다치 종속성을 제거해야 한다.
- 다치 종속성: 3개의 속성 A,B,C가 있을 때 A값에 따라 B 값이 여러개 가지고 있음 (즉, 1:N 관계)
- 다치 종속은 최소 2개 컬럼이 다른 컬럼에 종속되어야 하기 때문에 최소 3개의 컬럼이 필요하다.
6. 제5 정규화
- 제4 정규화를 진행한 테이블에 대해 조인 종속성(비손실 분해)을 제거해야 한다. (명확하지 않은 모든 결합 종속성을 제거한다)
- 조인 종속성: 하나의 릴레이션을 여러개 릴레이션으로 분해했다가 다시 조인했을 때 손실이 없고 필요없는 데이터가 생기는 것
반응형