정규화란
데이터베이스 설계에서 테이블 간에 중복된 데이터를 허용하지 않고 무결성을 유지하기 위한 과정이다. 이는 데이터를 효과적으로 저장하고 검색하기 위해 테이블을 구조화하는 프로세스를 의미한다. 정규화는 관계형 데이터베이스에서 사용되며, 데이터의 중복을 최소화하고 각 테이블이 특정 종류의 종속성을 만족하는 데 목적을 둔다.
목적
최종 목적은 이상 현상 발생 가능성을 줄이는 것이다.
- 중복 최소화
- 데이터의 중복을 최소화하여 저장 공간을 절약하고 데이터 일관성을 유지한다.
- 데이터가 중복될 경우 수정이 필요할 때 여러 테이블에서 수정해야 하므로 문제가 될 수 있다.
- 데이터 일관성 유지
- 각 테이블이 특정 종류의 종속성을 갖도록 한다.
- 데이터의 논리적 일관성을 확보하고 변경 시 발생할 수 있는 이상 현상을 방지한다.
- 유연한 쿼리 작성
- 각 테이블이 특정 주제를 가지고 있으므로 쿼리가 명확하고 간결해진다.
- 데이터베이스 유지보수 용이성
- 변경이 발생할 때 특정 테이블만 업데이트하므로 유지보수가 용이하다.
- 데이터베이스 확장성 향상
- 새로운 데이터 요구 사항이 발생해도 간단한 수정으로 새로운 테이블을 추가하거나 수정할 수 있다.
단계
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 정규화를 진행한 테이블에 대해 조인 종속성(비손실 분해)을 제거해야 한다. (명확하지 않은 모든 결합 종속성을 제거한다)
- 조인 종속성: 하나의 릴레이션을 여러개 릴레이션으로 분해했다가 다시 조인했을 때 손실이 없고 필요없는 데이터가 생기는 것
반응형
정규화란
데이터베이스 설계에서 테이블 간에 중복된 데이터를 허용하지 않고 무결성을 유지하기 위한 과정이다. 이는 데이터를 효과적으로 저장하고 검색하기 위해 테이블을 구조화하는 프로세스를 의미한다. 정규화는 관계형 데이터베이스에서 사용되며, 데이터의 중복을 최소화하고 각 테이블이 특정 종류의 종속성을 만족하는 데 목적을 둔다.
목적
최종 목적은 이상 현상 발생 가능성을 줄이는 것이다.
- 중복 최소화
- 데이터의 중복을 최소화하여 저장 공간을 절약하고 데이터 일관성을 유지한다.
- 데이터가 중복될 경우 수정이 필요할 때 여러 테이블에서 수정해야 하므로 문제가 될 수 있다.
- 데이터 일관성 유지
- 각 테이블이 특정 종류의 종속성을 갖도록 한다.
- 데이터의 논리적 일관성을 확보하고 변경 시 발생할 수 있는 이상 현상을 방지한다.
- 유연한 쿼리 작성
- 각 테이블이 특정 주제를 가지고 있으므로 쿼리가 명확하고 간결해진다.
- 데이터베이스 유지보수 용이성
- 변경이 발생할 때 특정 테이블만 업데이트하므로 유지보수가 용이하다.
- 데이터베이스 확장성 향상
- 새로운 데이터 요구 사항이 발생해도 간단한 수정으로 새로운 테이블을 추가하거나 수정할 수 있다.
단계
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 정규화를 진행한 테이블에 대해 조인 종속성(비손실 분해)을 제거해야 한다. (명확하지 않은 모든 결합 종속성을 제거한다)
- 조인 종속성: 하나의 릴레이션을 여러개 릴레이션으로 분해했다가 다시 조인했을 때 손실이 없고 필요없는 데이터가 생기는 것
반응형