Jamie the programmer

[SQLD 이론/IT 자격증] Part 1 - 데이터 모델과 성능 : [01] 정규화 (Normalization) 본문

IT 자격증/SQLD

[SQLD 이론/IT 자격증] Part 1 - 데이터 모델과 성능 : [01] 정규화 (Normalization)

jamie91 2025. 3. 4. 10:01
Contents 접기

 

1. 정규화(Normalization)

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

 

정규화를 하지 않으면 발생되는 문제

 

 

  • 정규화를 수행하지 않은 것으로 부서 테이블과 직원 테이블을 하나로 합쳐 둔 것이다.
  • 만약 위의 테이블에서 새로운 직우너이 추가되는 경우 부서 정보가 없으면 부서코드를 임의의 값으로 넣어야 한다.
    • 즉, 불필요한 정보가 같이 추가되는 것이다.
  • 또한 새로운 '총무부'가 추가되어야 할 경우 사원 정보가 없기 때문에 임의의 값으로 사원번호를 입력하거나 추가할 수 없게 된다.
  • 이러한 문제를 **이상현상(Anomaly)**이라고 한다.

 

 

 

 

  • 이와 같은 문제를 해결하기 위해서는 테이블을 분해해야 한다.
  • 정규화된 모델은 테이블이 분해된다.
  • 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 **조인(Join)**을 수행하여 하나의 합집합으로 만들 수도 있다.
  • 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.

 

2. 정규화 절차

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

 

3. 함수적 종속성(Functional Dependency)

[1] 제1정규화

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

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

[2] 제2정규화

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

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

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

[3] 제3정규화

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

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

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

[4] BCNF(Boyce-Codd Normalization Form)

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

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

4. 정규화 예제

  • 정규화 대상 테이블

[1] 제1정규화

  • 속성을 보고 한 개의 속성으로 유일성을 만족할 수 있는지 확인한다.
  • 제품번호는 1001, 1001 등이 한 번 이상 나오므로 중복되고, 주문번호 또한 AB345가 두번 나와서 중복된다.
  • 결과적으로 한 개의 속성으로 유일성을 만족할 수 없다.
  • 그러므로 2개의 조합으로 유일성을 만족할 수 있는지 확인해 보아야 한다.
  • 제품번호+주문번호가 식별자가 되면 엔터티의 유일성을 만족하게 된다.
  • 제1정규화는 이러한 식별자를 찾는 과정이며 여기까지 수행하면 된다.

[2] 제2정규화

  • 제2정규화는 기본키가 두 개 이상인 경우 대상이 된다.
  • 기본키가 제품번호+주문번호이므로 제2정규화 대상이다.
  • 제2정규화는 모든 속성(제품명, 재고 수량, 수출 여부 등)이 식별자에 종속해야 하며 그렇지 않은 경우에는 분해한다.
  • 확인 방법은 제1정규화와 마찬가지로 중복을 확인하는 것이다.

  • 위의 경우를 보면, 1001, 모니터가 중복되는 것을 확인할 수 있다.
  • 이러한 경우에는 엔터티를 분해하는 것이 제2정규화이다.

  • 위의 경우도 AB345 주문번호에 중복이 발생한다.
  • 이러한 경우는 분해를 해야 한다.
  • 결과적으로 최종 엔터티는 다음과 같다.

  • 위와 같이 3개의 엔터티가 도출된다.
728x90
반응형