본문 바로가기
Database/SQL 기초교육

SQL 기초 교육과정 3 (정규화)

by DBTechBiz 2022. 8. 19.

정규화

관계형 데이터베이스(테이블 간에 관계를 맺는) 에서 불필요한 데이터 중복을 최소화함으로써 저장공간을 최소화하고 데이터 변경 시 데이터의 불일치성을 최소화하기 위해 엔티티를 분리하는 작업이다.


 


제 1 정규형


‘모든 속성은 반드시 하나의 값을 가진‘ 정규형이며, 1 정규형과 관련된 속성은

다가 속성(multivalued attributes), 복합 속성(composite attributes), 반복 속성 등이 있다.

 

  • 다가 속성(multivalued attributes)
    같은 종류의 깂을 여러 개 가지는 속성을 뜻하며 아래와 같이 전화번호가 2개의 값들을 가지고 있다. 엔티티의 속성은 단일 값을 가져야 하므로 별도의 엔티티로 분리하여야 한다.

제 1 정규형 위반(다가속성)

 

 

  • 반복 속성
    전화번호1, 전화번호 2 속성은 전화번호의 종류일 뿐이다. 하나의 속성에 여러 개의 값을 다른 표현으로 한 것뿐이다. 반복되는 속성은 오른쪽 아래의 그림과 같이 전화구분으로 구분하여 전화번호에 대해 하나의 속성으로 관리하도록 분리하여야 한다.

제 1 정규형 위반(복합속성)

 


제 2 정규형

엔터티의 모든 속성이 주 식별자 전체에 종속적인‘ 정규형이며,

일반 속성 중에 주 식별자 전체에 종속적이지 않고 주 식별자를 구성하는 속성 일부에

부분 종속(Partial Dependency)적인 속성이 있다면 그 속성을 엔터티에서 분리해야 한다.

 

  • 부분 함수적 종속성 제거
    주문상품상세 엔터티에서 주문수량은 주문번호+상품코드 주식별자 전체에 종속적이지만 상품명은 주문번호+상품코드가 아닌 상품코드에만 부분 종속적인 속성이다. 따라서 부분 종속적인 관계의 속성을 따로 분리해야 하므로 주문상세 엔터티, 상품 엔터티로 분리할 수 있다.

    ▽ 주문번호로만 주문수량을 알 수 없다. 주문번호와 상품코드를 알아야 어떤 상품을 얼마큼 주문했는지 알 수 있다. 즉 주문수량은 주문번호+상품코드 주 식별자 전체에 종속적이라고 확인할 수 있다. 상품명은 상품코드만 알고 있어도 판별할 수 있다. 즉 상품명은 주 식별자를 구성하는 속성 일부에 부분 종속적인 속성이다.
제 2 정규형 위반(부분함수종속)

 


제 3 정규형

일반 속성 간에는 서로 종속되지 않은‘ 정규형이며,

3 정규형의 대상이 되는 속성을 이행 종속 속성(Transitive Dependency Attribute) 이라고 한다.

 

  • 이행 종속 속성 제거
    주문고객 엔터티의 일반 속성인 고객명이 또 다른 일반 속성인 고객번호에 종속적이므로 엔터티로 분리해야 한다.

    ▽ 제 2 정규형의 부분 함수 종속과 다른 점은 제 2 정규형은 상품명이 식별자(주문번호+상품코드)에 부분 종속(상품코드)적인 속성이였고 제 3 정규형은 고객명이 일반 속성(고객번호)에 종속적인 관계이다.
제 3 정규형 위반(이행종속)

 

▶ DBTechBiz 끄적끄적

모델 검토를 진행할 때 제 1, 2, 3 정규형이 어떤 위반인지 파악하기보다는 엔터티의 속성들의 관계를 보면서 계속 종속 관계를 제거(엔터티 분리)하면서 진행하다 보면 데이터 기반의 모델링을 수행하게 됩니다.

반응형

댓글