본문 바로가기
📁 Database/Concept

[ Database ] 정규화란?

by 깸뽀 2022. 12. 28.
728x90

📌 정규화

데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.

관계형 데이터베이스의 설계에서 테이블 간에 중복되는 데이터가 발생하지 않도록 릴레이션을 분해하여 구조화하는 프로세스를 말한다.

 

 

💡 정규화 장점

1. 데이터베이스 변경 시 이상현상(Anomaly)을 방지할 수 있다.

중복된 정보로 인해 이상이 발생하게 된다. 동일한 정보를 한 릴레이션에서는 변경하고 나머지 릴레이션에서는 변경하지 않은 경우 어느것이 정확한지 알 수 없게 된다.

🔸 이상현상의 종류

1. 삽입 이상 
데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제

2. 갱신 이상

중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 문제

 

3. 삭제 이상

튜플을 삭제하면 꼭 필요한 데이터까지 같이 삭제되는 데이터 손실 문제

 

2. 불필요한 데이터를 제거하고 데이터의 중복을 최소화

  • 만약 하나의 테이블에 모든 정보를 다 넣게 되면 불필요하게 중복되는 데이터가 저장 될 수 있고,그렇다면 불필요하게 더 많은 디스크 공간을 차지하게 될 수 있다. 따라서 테이블 간에 FK(외래키)로 PK(기본키)를 연결해 사용하면 디스크 공간을 훨씬 효율적으로 사용할 수 있다.
  • 불필요한 데이터를 제거함으로써 데이터 저장을 "논리적으로" 할 수 있다.

3. 종속성 삭제로 데이터의 일관성과 무결성  보장

 

 

💡 정규화 단점

1. 릴레이션 분해로 많은 JOIN 연산이 발생할 수 있고, 이로 인한 질의에 대한 응답 시간이 저하된다.

 

 


제1정규형

릴레이션에 속한 모든 속성의 도메인이 더 이상 분해되지 않는 원자값으로만 구성된 정규형이다.

출처 - https://hongcoding.tistory.com/147

 

 

 

제2정규화

릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다.

제1정규형에 속하는 릴레이션이 제2정규형을 만족하게 하려면, 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 릴레이션을 분해하는 정규화 과정을 거쳐야 한다.

  • 완전 함수 종속
    • 어떤 속성이 기본키에 대해 완전히 종속일 때
  • 부분 함수 종속
    • 어떤 속성이 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 속성 중 일부만 종속될 때

 

출처 - https://hongcoding.tistory.com/147

 

 

 

제3정규형

릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형에 속한다.

  • 이행적 함수 종속
    • A → B , B → C 인 경우 A → C 가 성립될 때
    • 즉, A를 알면 B를 알고 그를 통해 C를 알 수 있는 경우를 의미

 

출처 - https://hongcoding.tistory.com/147

 

 

 

BCNF

릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 BCNF에 속한다.

💡 하나의 릴레이션에 여러개의 후보키가 존재할 수도 있는데, 이런 경우는 제3정규형까지 모두 만족하더라도 이상 현상이 발생할 수 있다. 이러한 이상현상을 해결하기 위해 제3정규형보다 좀 더 엄격한 제약조건을 제시한 것이 BCNF이다.

 

출처 - https://hongcoding.tistory.com/147

 

  • 학생번호-교수 릴레이션은 함수 종속 관계가 성립하지 않는 동등한 학생번호, 교수 속성으로 구성하고 {학생번호, 교수}가 기본키의 역할을 담당한다. 즉, 후보키가 아닌 결정자가 존재하지 않기때문에 BCNF에 속한다.
  • 교수-특강 릴레이션은 교수와 특강이 함수 종속 관계를 띄우며, 교수가 유일한 후보키이자 기본키이다. 즉, 후보키가 아닌 결정자가 존재하지 않기때문에 BCNF에 속한다.

 

 

 

고급 정규형 (제4정규형, 제5정규형)
  • 제4정규형
    • 릴레이션이 BCNF를 만족하면서, 함수 종속이 아닌 다치 종속(MVD: Multi Valued Dependency) 를 제거해야 만족할 수 있다.
  • 제5정규형
    • 릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속(JD: Join Dependency) 을 제거해야 만족할 수 있다.

실제로 데이터베이스를 설계할 때 모든 릴레이션이 무조건 제5정규형에 속하도록 분해해야 하는 것은 아니다.

오히려 그렇게 되면 비효율적인 경우가 많다.

일반적으로 제3정규형이나 BCNF에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상이 발생하는 문제를 해결한다고 한다.

 

 

 

 

 

 

참고

 

 

 

 

728x90

댓글