재미로하는 공부

[sqld] 데이터 모델과 성능 정규화(Normalization)

lowcodingpython 2022. 3. 29. 20:27
반응형

정규화 (Normalization)****

  • 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정 
  • 데이터 중복을 제거하며 데이터 모델의 독립성을 확보하기 위한 방법
  • 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화할 수 있다. 
  • 제1정규화부터 제5 정규화까지 있지만, 실질적으로 제3정규화까지만 수행 
  • 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.

*정규화를 하지 않아 이상현상이 존재하는 모델입니다.

정규화를-안함

*정규화를 진행한 사진

 

정규화

 > 정규화 절차

정규화 절차                                                                       설명
제1정규화 - 속성의 원자성을 확보한다.
- 기본키를 설정한다.
제2정규화 - 기본키가 2개 이상의 속성으로 이루어진 경우 부분 함수 종속성을 제거(분해)한다.
제3정규화 - 기본키를 제외한 칼럼 간에 종속성을 제거한다.
- 즉, 이행 함수 종속성을 제거한다.
BCNF - 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다.
제4정규화 - 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.
제5정규화 - 조인에 의해서 종속성이 발생되는 경우 분해한다.

함수적 종속성(Functional Dependency)

 


제1정규화

  • 함수적 종속성을 근거로 하며 함수적 종속성이란 X -> Y이면 Y는 X에 함수적으로 종속된다고 말한다.
  • X가 변화하면 Y도 변화하는지 확인한다.
  • ex) 회원 ID가 변화하면 이름도 변경될 것이고 이런 경우는 회원 ID가 기본키가 되고, 회원 ID가 이름을 함수적으로 종속한다.

제1정규화

  • 계좌 테이블 X가 Y의 칼럼들을 함수적으로 종속하고 한다.
  • X는 계좌번호 하나만으로는 유일성을 만족하지 못한다고 가정하고 계좌번호와 회원 ID를 기본키로 잡은 것
  • 기본키를 잡는 것이 제1정규화

 

제2정규화

  • 부분 함수 종속성이란 | 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생
  • 키본키가 하나의 칼럼으로 이루어지면 제2정규화는 생략

제2정규화

  • 위에 사진은 키본키에 있는 회원 ID가 변경되면 이름이 변경된다.
  • 회원 ID가 이름을 함수적으로 종속하고 있는 것
  • 이러한 경우가 부분 함수 종속성이라고 한다. (부분 함수 종속성이 발생하면 분해를 해야 한다.)

제2정규화-부분-함수-종속성

부분 함수 종속성을 제거하면 위의 사진과 같고 회원이라는 새로운 테이블이 도출되고 회원 ID가 기본키가 된다.

 

제3정규화

  • 이행 함수 종속성을 제거한다. 이행 함수 종속성이란 키본키를 제외하고 칼럼 간에 종속성이 발생하는 것 
  • 제3 정규화는 제1정규화와 제2정규화를 수행한 다음에 해야 한다.

제3정규화

  • 위처럼 관리점이 관리점 코드에 종속되는 것을 이행 함수 종속성이라 한다.

이행-함수-종속성

- 제3정규화를 수행하면 위에 사진처럼 관리점 테이블이 도출되고 관리점 코드가 기본키가 된다.

 

BCNF(Boyce-Codd Normal Form)

  • 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.

BCNF

  • 위의 사진처럼 키본키(학번, 과목 번호)가 교수를 함수적으로 종속하고 있다.
  • 이때 교수가 후보키(최소성과 유일성을 만족)이고 교수가 과목 번호를 함수적으로 종속하는 경우 분해가 일어난다.
  • 위와 같은 경우 교수 테이블을 새롭게 만들고 기본키는 교수로 하고 칼럼은 과목 번호가 된다.
반응형