[DataBase] 2020.06.12 Modeling

정규화 정의

  • 데이터베이스 정규화란 데이터베이스의 설계 과정에서 불필요한 데이터(data redundancy)를 최소화하는 것을 말합니다.
  • 삽입/갱신/삭제 시 발생할 수 있는 각종 이상현상(Anamolies)들을 방지할 수 있습니다.

이상현상(Anamolies)

(1) Update

  • 데이터가 변경되었을 때, 중복 레코드를 모두 갱신해줘야하고 이로 인해 데이터 불일치가 발생할 수 있습니다.

(2) Insert

  • 새로운 레코드 삽입시 불필요한 데이터도 삽입해야 합니다.

(3) Delete

  • 레코드 삭제 시 필요한 레코드도 함께 삭제되는 문제가 발생합니다.

제1 정규화

1. 정의

테이블(Relation)이 제 1정규형을 만족했다는 것은 아래 세가지 조건을 만족했다는 것입니다.

< 조건 >

(1) 원자값으로만 구성되어 있다.
(2) 컬럼이 반복되지 않는다.
(3) 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있다.

2. 제1 정규화 만족하지 않을 경우의 문제점

  • 데이터 관리의 어려움
  • 데이터를 다룰 때 불필요한 연산, 코딩이 더해진다.

3. 해결방법

1) 컬럼추가 => 불완전한 해결법
2) 레코드 추가 => 불완전한 해결법
3) 두개의 테이블로 분리 => 근본적인 해결책!!


예시를 통해 살펴보겠습니다.

아래 테이블(Relation)은 제1 정규형 조건 중 (1)을 위반한 것입니다.

정규화

핸드폰 번호를 여러개를 가지고 있기 때문에 원자값을 가지지 않았으므로 제1 정규형을 위반한 것입니다.

정규화

원자값으로만 구성하기 위해 위의 테이블처럼 핸드폰 번호를 두개의 컬럼으로 쪼갤수도 있을 것입니다.

그러나 핸드폰 번호1과 핸드폰 번호2로 컬럼을 구성하면 원자성은 만족하지만 핸드폰 번호라는 컬럼이 반복하게 됩니다.( 조건(2) 위반한 사례 )

정규화

조건 (1)과 (2)를 만족하기 위해서 위처럼 구성해볼 수 있을 것입니다.

그러나 레코드가 반복되면서 학번이 더이상 고유하게 식별할 수 있는 키가 아니게 되었습니다. 따라서, 조건 (3)을 만족하기 위해 테이블을 분리해서 설계하겠습니다.

정규화

위처럼 테이블을 나눠서 구성하면 제1 정규형 조건을 모두 만족하는 것을 알 수 있습니다.

제2 정규화

1. 정의

제 2정규화 수행했을 경우 테이블의 모든 컬럼이 완전 함수적 종속을 만족합니다.

  • 함수적 종속 : X의 값에 따라 Y값이 결정될 때 X-> Y로 표현하는데, 이를 Y는 X에 대해 함수적 종속이라고 합니다. 예를 들어, 위의 테이블에서 학번을 알면 이름을 알수 있는데, 이 경우 학번이 X가 되고 이름이 Y가 됩니다.
  • 함수적 종속에서 X의 값이 여러 요소일 경우, {X1, X2} -> Y일 경우, X1와 X2가 Y의 값을 결정할 때 이를 완전 함수적 종속 이라고 하고, X1, X2 중 하나만 Y의 값을 결정할 때 이를 부분 함수적 종속 이라고 한다.

정규화

위의 테이블에서 Factory와 Model을 알면 Model Full Name 필드를 참조하지 않아도 결정되기 때문에, {Factory, Model} -> Model Full Name이라고 할 수 있습니다. 그러나 Model과 Country는 아무런 연관성이 없기 때문에, Country는 Factory와만 종속관계에 있게 되고 이를 부분 함수 종족이라고 하게 되는 것입니다.

2. 해결방법

정규화

위에서 부분함수 종속을 제거하면 아래와 같습니다.

정규화

따라서, 부분 함수 종속을 제거한 이후의 테이블은 다음과 같고 이는 제 2정규형을 만족한 테이블입니다.

정규화

제3 정규화

1. 정의

테이블(Relation)이 제3 정규형을 만족한다는 것은 아래의 두가지 조건을 만족한다는 것을 의미합니다.

2. 해결방법

< 조건 >

1) 테이블이 제2 정규화 되었다.
2) 기본키(Primary key)에 해당하지 않는 속성들은 기본키에만 의존해야 한다.

아래의 테이블은 두번째 조건을 위반한 사례입니다.

정규화

위 테이블에서 ‘학번’이 후보키가 됩니다. 하지만 ‘학과 전화번호’는 기본키가 아닌 속성인 ‘학과’를 거쳐 ‘학번’에 의존하고 있습니다. 이는 제3 정규형을 위반한 사례로 아래와 같이 테이블을 쪼갤 수 있습니다.

정규화

위의 테이블은 제3 정규형을 만족하는 상태입니다.

댓글남기기