테이블 정규화에 대해서

이동명·2023년 6월 7일
0
post-thumbnail

정규화란 ..?

테이블 정규화는 데이터베이스 설계에서 중복을 최소화하고 데이터의 일관성과 무결성을 보장하기 위해 테이블을 구성하는 과정입니다. 정규화는 데이터를 관리하기 위한 효율적인 구조를 만들기 위해 중복된 데이터를 제거하고 종속 관계를 명확하게 정의합니다.

  • 정규화는 일반적으로 제1 정규형(1NF), 제2 정규형(2NF), 제3 정규형(3NF), 보이스-코드 정규형(BCNF) 등 다양한 정규형을 만족시키는 과정을 거칩니다. 이러한 정규형은 데이터의 중복을 제거하고 각 테이블이 한 가지 주제에 집중될 수 있도록 합니다.

  • 제1 정규형(1NF)은 테이블의 각 열이 원자적인 값을 가지도록 합니다. 즉, 열은 하나의 값을 가지며, 여러 개의 값을 가지는 경우 별도의 테이블로 분리해야 합니다.

  • 제2 정규형(2NF)은 제1 정규형을 만족하면서 부분 함수 종속을 제거합니다. 부분 함수 종속은 테이블의 일부 열이 기본 키가 아닌 다른 열에 종속되는 경우를 말합니다. 이러한 경우 종속성을 제거하기 위해 해당 열들을 별도의 테이블로 분리합니다.

  • 제3 정규형(3NF)은 제2 정규형을 만족하면서 이행 함수 종속을 제거합니다. 이행 함수 종속은 A가 B에 종속하고 B가 C에 종속하는 경우를 말합니다. 이러한 경우에는 A, B, C를 각각 별도의 테이블로 분리하여 정규화합니다.

  • 보이스-코드 정규형(BCNF)은 제3 정규형을 만족하면서 결정자 종속을 제거합니다. 결정자 종속은 한 열이 다른 열의 값을 결정하는 경우를 말합니다. BCNF를 만족시키기 위해 테이블을 분리하거나 추가 테이블을 생성하여 종속성을 해결합니다.

정규화는 데이터의 중복을 최소화하고 데이터베이스의 성능, 일관성 및 유지보수를 향상시키는 데 도움이 됩니다. 그러나 지나치게 정규화를 진행하면 쿼리의 복잡성이 증가할 수 있으며, 일부 상황에서는 성능 저하가 발생할 수 있으므로 적절한 수준의 정규화를 고려해야 합니다.

간단한 예시를 들어보자

우리는 고객(Customer)과 주문(Order)에 대한 데이터를 관리하는 온라인 상점의 데이터베이스를 설계하려고 합니다.

  1. 제1 정규형(1NF):
  • 고객 테이블(Customer Table):

    고객ID(Customer ID): 기본 키
    이름(Name)
    이메일(Email)
    전화번호(Phone)
    주문 테이블(Order Table):

    주문ID(Order ID): 기본 키
    고객ID(Customer ID): 외래 키
    주문일자(Order Date)
    주문금액(Total Amount)

  1. 제2 정규형(2NF):
  • 주문 테이블(Order Table):

    주문ID(Order ID): 기본 키
    고객ID(Customer ID): 외래 키
    주문일자(Order Date)
    주문 상세 테이블(Order Detail Table):

    주문ID(Order ID): 복합 기본 키의 일부
    상품ID(Product ID): 복합 기본 키의 일부
    수량(Quantity)
    가격(Price)

3.제3 정규형(3NF):

  • 고객 테이블(Customer Table):

    고객ID(Customer ID): 기본 키
    이름(Name)
    이메일(Email)
    전화번호(Phone)
    주문 테이블(Order Table):

    주문ID(Order ID): 기본 키
    고객ID(Customer ID): 외래 키
    주문일자(Order Date)
    주문 상세 테이블(Order Detail Table):

    주문ID(Order ID): 외래 키
    상품ID(Product ID): 외래 키
    수량(Quantity)
    가격(Price)

위의 예시에서는 제1 정규형부터 제3 정규형까지의 과정을 거쳤습니다.

  • 제1 정규형: 각 테이블의 열은 원자적인 값을 가지고 있습니다.

  • 제2 정규형: 주문 테이블을 주문 상세 테이블과 분리하여 부분 함수 종속을 제거했습니다.

  • 제3 정규형: 주문 상세 테이블에서 주문ID와 상품ID에 종속된 수량과
    가격을 분리하여 이행 함수 종속을 제거했습니다.

이렇게 정규화된 데이터베이스 구조는 데이터의 중복을 줄이고 데이터의 일관성과 무결성을 유지할 수 있습니다.

profile
Web Developer

0개의 댓글