본문 바로가기
카테고리 없음

[SQL] 정규화

by hbIncoding 2024. 10. 2.

1. 정규화

  • 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
  • 따라서 여러 개의 릴레이션을 생성하게 된다.
  • 이를 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다.
  • 중복된 데이터를 허용하지 않는 다는 것이며, 정규화를 통해 무결성을 유지할 수 있고, DB의 저장 용량 역시 줄일 수 있다.

2. 정규화의 장단점

1) 장점

  • DB 변경 시 이상 현상을 제거할 수 있다.
  • 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
  • DB와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.

2)단점

  • 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아진다.
  • 질의에 대한 응답 시간이 느려질 수도 있다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과
  • 따라서 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있다
  • 만약 조인이 많이 발생하여 성능 저하가 나타나면 반정규화(De-normalization)를 적용할 수도 있다

3. 정규화의 단계

1) 제 1 정규화(1NF)

  • 테이블의 칼럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것
  • 다음과 같은 규칙들을 만족해야한다.
    • 각 컬럼이 하나의 속성만 가져야한다
    • 하나의 컬럼은 같은 종류나 타입의 값을 가져야한다.
    • 각 컬럼이 유일한 이름을 가져야한다
    • 칼럼의 순서가 상관없어야 한다.

EX)

이름 나이 수강과목
홍길동 20 C,C++
이순신 21 Java
이 산 22 DB, 운영체제

위와 같은 테이블을

이름 나이 수강과목
홍길동 20 C
홍길동 20 C++
이순신 21 Java
이 산 22 DB
이 산 22 운영체제

으로 고치는 것이다.

 

2) 제 2 정규화(2NF)

  • 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
    • 완전 함수 종속 : 기본키의 부분 집합이 결정자가 되어선 안된다는 것
  • 다음과 같은 규칙들을 만족해야한다.
    • 제 1 정규화를 만족
    • 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야한다. 모든 칼럼이 완전 함수 종속을 만족해야한다.
학생 이름 나이 수강과목
홍길동 20 C
홍길동 20 C++
이순신 21 Java
이 산 22 DB
이 산 22 운영체제

이러한 테이블을

학생 이름 나이
홍길동 20
이순신 21
이 산 22

 

학생 이름 수강과목
홍길동 C
홍길동 C++
이순신 Java
이 산 DB
이 산 운영체제

이렇게 2개의 테이블로 나누는 것이다.

 

 

3) 제 3 정규화(3NF)

  • 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
    • 이행적 종속 : A->B, B->C가 성립할 때 A->C가 성립되는 것을 의미
  • 다음과 같은 규칙들을 만족해야한다.
    • 제 2 정규화를 만족
    • 기본키를 제외한 속성들 간의 이행 종속성이 없어야한다.

EX) 이와 같은 테이블이 있다고 가정하자

학생 코드 학생이름 DOB Street City State ZIP

학생코드가 기본키이고, 기본키가 하나이므로 2차 정규형은 만족한다. 하지만 이 데이터의 Zip컬럼을 알면 Street, City, State를 결정할 수 있다. 또한 여러명의 학생들이 같은 Zip코드를 갖는 경우에 Zip코드만 알면 Street, City, State가 결정되기 때문이 이 컬럼들에는 중복된 데이터가 생길 가능성이 있다.

 

그러므로 위와 같은 테이블을

 

학생 코드 학생 이름 DOB ZIP

 

 

ZIP Street City State

이와 같이 나누면 테이블을 2개로 나누면 제 3차 정규화를 만족한다.

 

4) BCNF(Boyce-codd Normal Form)

  • 3차 정규화를 조금 더 강화한 버전
  • 3차 정규화에서 해결할 수 없는 이상 현상을 해결할 수 있다.
  • 3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형
  • 다음과 같은 규칙들을 만족해야한다.
    • 제 3 정규화를 만족
    • 모든 결정자가 후보키 집합에 속해야한다.

EX)

학생 과목 교수
학점
 1 AB123  김인영  A
 2  CS123  Mr.Sim  A
 3  CS123  Mr.Sim  A

위와 같이 테이블이 구성된 경우에 데이터가 중복되고, 갱신 이상이 발생한다.

 

교수 테이블

교수 과목
 김인영 AB123
 Mr.Sim CS123

 

수강 테이블

학생 과목  학점
 1  AB123   A
 2  CS123   A
 3  CS123   A

그래서 2개의 테이블로 분리한다.

 

5) 제 4 정규화(4NF)

  • 다치 종속(Multivalued Dependency)을 제거하는 단계
  • 하나의 속성이 두 개 이상의 독립적인 다치 종속 관계를 가질 때 이를 제거
  • 예시
    • 학생이 동시에 여러 수업을 듣고, 여러 동아리에 가입할 수 있다면 학생-수업, 학생-동아리 간 다치 종속이 발생할 수 있습니다. 이를 분리하여 각각의 테이블로 나누어 관리

6) 제 5 정규화(5NF)

  • 조인 종속을 제거하는 단계
  • 테이블을 여러개로 나누었을 때 발생할 수 있는 조인에 따른 종속성을 제거
  • 매우 복잡한 관계에서 적용되며, 모든 데이터가 조인으로만 구성될 수 있는 경우에 이를 해결하는 정규형

 

4. 참고

1)정규화 : https://superohinsung.tistory.com/111