본문 바로가기
IT/ORACLE

정규화 (1정규형, 2정규형, 3정규형) 변환과정

by 베베야 2021. 5. 14.
728x90

정규화

정규화 과정이란 중복된 속성을 최소화 하고 종속관계에 있는 속성을 제거하는 과정입니다.

이러한 정규화 과정을 다시 조인하면 데이터의 손실없이 이전상태로 복구가 가능해야 한다

정규형은 1,2,3 형이 있으며 다음과 같은 특징을 가집니다. 

1정규형(1NF) : 모든 속성은 반드시 하나의 값만 가져야 한다(도메인 원자값)

2정규형(2NF) : 모든 속성은 반드시 기본키(PK)에 모두 종속되어야 한다. (부분적 함수 종속 제거)

3정규형(3NF) : 기본키가 아닌 모든 속성 간에는 서로 종속될 수 없다. (이행적 함수 종속 제거)

 

참고 : 도메인이란 하나의 속성이 취할 수 있는 동일한 타입의 원자값들의 집합이다

 

 

제 1 정규화 (비정규형 -> 1NF)

아래는 정규화 되지 않은 비정규형 테이블 입니다. 이 테이블을 1정규형 시켜 보도록 하겠습니다.

 

1. 반복 그룹이 존재하면 안됩니다.

하나 라는 학생에 대한 정보 중에서 이름,메일,대학,전공은 데이터가 추가되어도 반복적인 값이 계속 추가됩니다. 따라서 테이블을 분리 해야합니다.

 

2. 모든 행은 식별자로 완전하게 구분이 되어야 합니다.

수강내역 테이블은 PK인 "학번"만으로 모든행을 구분할 수 없습니다. 그래서 학번'+'수강학기'+'과목명'을 조합하여 복합 식별자 만들어줍니다.

 

 

제 2 정규화 (1NF-> 2NF) - 부분함수 종속 제거

1. Key가 아닌 값들은 모두 key에 종속 되어야 합니다.

여기서 key값은 학번,수강학기,과목명 이고 key가 아닌 속성은 "성적","제한인원" 입니다.

성적은 학번,수강학기,과목명을 알아야 확인이 가능하기 떄문에 key에 종속된다고 할수 있습니다.

제한인원은 학번과는 관계가 없습니다.

 

위의 조건으로 수강내역 테이블을 나눠서 개설과목 테이블을 추가했습니다.

개설 과목의 Key는 수학학기+과목명인 복합 key 입니다.

 

제 3정규화(2NF-> 3NF) - 이행적 함수 종속 제거

1. key가 아닌 모든 속성은, key 속성에 완전히 종속되어야 합니다.(2정규화 만족조건)

2. key가 아닌 속성은 key 속성에만 종속되어야 합니다.

 

아래의 학생 테이블에서  '대학'과 '전공'을 보게되면 key가 아닌 컬럼인데도 불구하고 종속 관계가 성립이 됩니다.

 

따라서 학생 테이블을 대학정보 테이블을 추가해서 나누었습니다.

대학정보 테이블에서 대학이 전공속성을 포함하고 있지만 key는 테이블의 튜플을 구분해 낼수 있어야 하기 떄문에 key를 전공 속성으로 설정해습니다.

이후 대학정보를 참조하기 위해서 학생 테이블에 전공 컬럼을 FK(외래키)로 설정하여 대학정보 테이블을 참조 할 수 있게 합니다.

 

비정규형 테이블의 정규화 최종 결과

반응형
그리드형

댓글