데이터베이스 정규화

newVelog·2023년 12월 8일
0

CS

목록 보기
5/31

정규화 (Normalization)

정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스가 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다.

정규형 원칙

  • 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야 한다.
  • 자료의 중복성은 감소해야 한다.
  • 독립적인 관계는 별개의 릴레이션으로 표현해야 한다.
  • 각각의 릴레이션은 독립적인 표현이 가능해야 한다.

정규화의 장단점

정규화의 장점

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

정규화의 단점

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

1NF (제1정규형)

테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것

  • 각 컬럼이 하나의 속성만을 가져야한다.
  • 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야한다.
  • 각 컬럼이 유일한 이름을 가져야한다.
  • 칼럼의 순서가 상관없어야한다.
이름나이수강과목
홍길동20C,C++
이순신21Java

위와 같은 테이블을 아래처럼 변경

이름나이수강과목
홍길동20C
홍길동20C++
이순신21Java

2NF (제2정규형)

제1 정규화를 진행한 테이블에 대해 부분 함수 종속을 제거한 형태

※부분 함수 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 의미한다.

  • 제 1정규화를 만족해야한다.
  • 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야한다. 모든 칼럼이 완전 함수 종속을 만족해야한다.
이름나이수강과목
홍길동20C
홍길동20C++
이순신21Java

위와 같은 테이블을 아래처럼 분리하여 변경

이름나이
홍길동20
이순신21

이름수강과목
홍길동C
홍길동C++
이순신Java

3NF (제3정규형)

제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해

※이행적 종속이라는 것은 A->B, B->C가 성립할 때 A->C가 성립되는 것을 의미한다.

  • 제 2 정규화를 만족해야한다.
  • 기본키를 제외한 속성들 간의 이행 종속성(Transitive Dependency)이 없어야한다.
학생 코드학생이름DOBStreetCityStateZIP

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

학생 코드학생이름DOBZIP

ZIPStreetCityState

BCNF (보이스/코드 정규형)

3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형

※결정자란 함수 종속 관계에서 특정 종속자(dependent)를 결정짓는 요소, 'X->Y'일 때 X는 결정자, Y는 종속자이다.

  • 제 3 정규화를 만족해야 한다.
  • 모든 결정자가 후보키 집합에 속해야 한다.
학생과목교수학점
1AB123김인영A
2CS123Mr.SimA
3CS123Mr.SimA

위와 같이 테이블이 구성된 경우에 데이터가 중복되고, 갱신 이상이 발생하므로 2개의 테이블로 분리한다.

교수과목
김인영AB123
Mr.SimCS123

학생과목학점
1AB123A
2CS123A
3CS123A

출처 : [DataBase] 정규화(1NF, 2NF, 3NF, BCNF)

0개의 댓글