MYSQL 1차, 2차, 3차 정규화 진행하기

반응형
  • 1차 정규화 진행

비정규 테이블에서 1차 정규화를 진행하였다.

모든 열의 값이 원자적으로. 즉, 각 열에는 하나의 값만 존재하게 열을 추가하였다.

 

각 열에 하나의 값만 존재해야하는 이유

- 하나의 컬럼에 여러 원자값이 존재시, 조회조건을 통한 조회 어려움 발생

- 수정/삭제가 발생할 때 특정 데이터를 찾아 수정/삭제의 어려움

- FK(외래키) 및 index 지정이 불가능

 

  • 2차 정규화 진행

1차 정규화 진행 후 2차 정규화 진행하였다.

2차 정규화는 부분종속 제거로써 기본키(PK)가 아닌 모든 속성이 기본키에 완전 함수 종속된 상태를 의미한다.

복합키로 이루어진 기본키 중에 특정 키에 종속적인 상황을 제거해야한다.

 

기본키에 종속적이지 않다면 해당 테이블에 어울리지 않는 컬럼이라는 생각이 필요하다.

사실상 해당 테이블에 어울리지 않는 컬럼 분리 작업이다.

 

GRADE는 기본키인 STUDENT_ID정보와 기본키인COURST_ID정보가 둘다 있어야지 데이터를 조회할 수 있을 것이라고 생각해서 학점 TABLE로 구성하였고, 그 테이블에는 PK 설정을 위해 ID컬럼을 따로 추가했다.

 

STUDENT_NM컬럼, DEPARTMENT컬럼, fees 컬럼은 기본키 STUDENT_ID와 어울리는 컬럼이라고 생각했기 때문에

학생 TABLE로 구성하였다.

 

  • 3차 정규화 진행

2차 정규화 진행 후 3차 정규화 진행하였다.

3차 정규화는 이행종속 제거로써 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 한다.

예를들어, X ->Y 이고 Y->Z 이면 X->Z 가 성립. Z가 X에 이행적으로 함수 종속이다.

 

기본키 STUDENT_ID로 DEPARTMENT가 확인 가능하고 DEPARTMENT로 fees가 확인 가능해서 이행적 함수종속이라고 생각했다. 이행적 함수종속 제거를 위해서 DEPARTMENT컬럼과 fees 컬럼을 분리하여 장학금 TABLE로 구성하였고, 그 테이블에는 PK 설정을 위해 ID컬럼을 따로 추가했다.