티스토리 뷰

데이터베이스 정규화란?

**정규화(Normalization)**는 데이터베이스 설계에서 데이터의 중복을 최소화하고, 데이터 무결성을 유지하기 위해 데이터를 구조화하는 과정입니다. 정규화를 통해 데이터베이스는 중복과 불일치로 인한 문제를 방지하고, 데이터의 일관성을 유지하며 저장 공간을 효율적으로 사용할 수 있습니다.

정규화는 보통 여러 단계(정규형, Normal Form)로 나뉘며, 각 단계는 특정 조건을 만족해야 합니다.

정규화의 목적

  1. 중복 데이터 최소화: 데이터를 중복 저장하지 않음으로써 저장 공간을 절약하고, 데이터 불일치를 방지.
  2. 데이터 무결성 유지: 중복된 데이터로 인한 데이터 불일치 문제를 해결하고, 데이터의 일관성을 유지.
  3. 삽입, 수정, 삭제 이상(Anomalies) 방지: 데이터 삽입, 수정, 삭제 시 발생할 수 있는 데이터 이상을 줄임.

정규화 과정 (정규형)

  1. 제1 정규형 (1NF, First Normal Form):
    • 모든 컬럼의 값이 **원자값(Atomic Value)**이어야 함.
    • 즉, 각 컬럼은 하나의 값을 가져야 하며, 중복되는 데이터는 허용되지 않음.
    • 예시: 하나의 컬럼에 여러 개의 전화번호를 넣지 않고, 전화번호를 각각의 행으로 분리.
  2. 제2 정규형 (2NF, Second Normal Form):
    • 제1 정규형을 만족하면서, 부분 종속성을 제거.
    • 즉, 복합키(두 개 이상의 컬럼으로 이루어진 키)를 사용할 때, 일부 컬럼이 해당 키의 일부에만 종속되면 안 됨.
    • 예시: 학생 ID와 과목 ID로 이루어진 복합키에서, 학생 이름은 과목과 관련이 없으므로 별도의 테이블로 분리.
  3. 제3 정규형 (3NF, Third Normal Form):
    • 제2 정규형을 만족하면서, **이행적 종속성(Transitive Dependency)**을 제거.
    • 즉, A → B → C의 관계에서 B가 A에 종속되고, C가 B에 종속된다면, C는 A와 직접적으로 관계가 없으므로 별도의 테이블로 분리.
    • 예시: 직원 테이블에서 직원 ID와 부서명을 함께 저장할 때, 부서명이 부서 ID에 종속되므로, 부서 정보는 별도의 테이블로 분리.
  4. BCNF (Boyce-Codd Normal Form):
    • 제3 정규형을 만족하면서, 모든 결정자가 후보 키(candidate key)이어야 함.
    • 예시: 강사와 강의실 테이블에서, 강의실이 강사에 의해 결정되지만, 동시에 다른 강사도 해당 강의실을 사용할 수 있다면, 이 관계를 해결하기 위해 테이블을 분리.
  5. 제4 정규형 (4NF):
    • 제3 정규형 또는 BCNF를 만족하면서, **다치 종속성(Multi-Valued Dependency)**을 제거.
    • 하나의 속성에 여러 값이 종속되는 경우 이를 분리하여 별도의 테이블로 구성.
  6. 제5 정규형 (5NF):
    • 제4 정규형을 만족하면서, **조인 종속성(Join Dependency)**을 제거.
    • 즉, 테이블을 여러 개로 분리했을 때, 다시 조인했을 때 정확한 원본 데이터를 복원할 수 있어야 함.

정규화의 장점

  • 데이터 중복 감소: 데이터베이스의 일관성과 무결성을 유지하기 위해 중복된 데이터를 줄임.
  • 저장 공간 절약: 중복 데이터를 제거함으로써 데이터 저장 공간을 절약.
  • 데이터 변경 용이: 데이터 수정 시 한 곳에서만 수정하면 되므로, 유지보수가 용이.
  • 데이터 무결성 보장: 중복 데이터를 제거하여 데이터 불일치를 방지하고, 데이터의 정확성을 보장.

정규화의 단점

  • 복잡성 증가: 테이블이 많아지고 관계가 복잡해지기 때문에, 쿼리가 복잡해질 수 있음.
  • 성능 저하: 데이터 조회 시 여러 테이블을 조인해야 하는 경우 성능이 저하될 수 있음. 이 때문에 정규화와 비정규화를 적절히 조합하여 성능과 무결성 사이의 균형을 맞춰야 함.

결론

정규화는 데이터베이스 설계의 필수적인 과정으로, 데이터 중복을 최소화하고 무결성을 유지하며 효율적인 데이터 관리를 돕습니다. 하지만, 성능유지보수성 사이에서 균형을 맞추는 것이 중요하며, 상황에 따라 비정규화를 사용해 성능을 개선하는 경우도 있습니다.

 

 

 

 

참고.

데이터 이상(Anomalies) 설명

  1. 삽입 이상(Insertion Anomaly):
    • 데이터를 삽입할 때 불필요한 데이터가 함께 삽입되거나, 필요한 데이터를 삽입할 수 없는 문제 발생.
    • 예시: 부서를 추가하려면 직원 정보를 같이 입력해야 하는 경우.
  2. 갱신 이상(Update Anomaly):
    • 중복된 데이터로 인해 데이터를 수정할 때 모든 중복된 데이터가 일관되게 수정되지 않는 문제.
    • 예시: 직원 주소를 변경할 때, 모든 테이블에서 해당 주소를 일관되게 수정하지 않으면 데이터 불일치 발생.
  3. 삭제 이상(Deletion Anomaly):
    • 데이터를 삭제할 때, 원하지 않는 다른 데이터도 함께 삭제되는 문제.
    • 예시: 직원 정보를 삭제할 때, 직원이 속한 부서 정보가 같이 삭제되는 경우.

데이터 이상 방지 방법

  • 정규화: 테이블을 여러 개로 분리하고 중복 데이터를 최소화하여 데이터 이상 현상 방지.
  • 외래 키 사용: 테이블 간의 참조 관계를 정의해 데이터 무결성 유지.