[CS-데이터베이스]정규화

지영·2023년 7월 5일
0

CS

목록 보기
39/77
post-custom-banner

📍 정규화란,

이상현상이 있는 DB테이블을 분해하여 이상현상을 없애는 과정. 즉, 중복을 최소화하기 위해 데이터를 구조화하는 작업.

목적

  • 데이터의 중복을 없애면서 불필요한 데이터를 최소화시킴.
  • 무결성을 지키고, 이상현상을 방지한다.
  • 테이블 구성을 논리적이고 직관적으로 할 수 있다.
  • 데이터베이스 구조를 확장에 용이하도록 한다.

제 1정규화

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

조건
1. 어떤 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있어야 한다.
2. 모든 속성에 반복되는 그룹이 없어야 한다.
3. 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.

예시)
원자값을 만족하지 않은 테이블

제 1정규화를 만족한 테이블

제 2정규화

테이블의 모든 컬럼이 완전 함수적 종속을 만족해야 한다.
여기서 완전 함수적 종속이란, 기본키의 부분집합이 결정자가 되어선 안된다는 것을 뜻한다.

쉽게 말해서 어떤 테이블의 기본키가 복합키(두 개 이상의 컬럼으로 구성된 키)일 때, 기본키의 부분집합으로 기본키의 부분집합으로 인해 다른 칼럼의 값이 결정되어서는 안된다는 것이다.

조건
1. 제 1정규화를 만족해야 한다.
2. 모든 칼럼이 완전 함수적 종속을 만족해야 한다.

예시)
제 2정규화를 만족하지 않은 테이블

이 테이블의 기본키는 {학생번호, 강좌이름}이라는 복합키이며 성적을 결정한다.
그런데 여기서 강의실컬럼은 기본키의 부분집합인 {강좌이름}에 의해 결정된다.

제 2정규화를 만족한 테이블

기존의 테이블엣 강의실을 분해하여 별도의 테이블을 만들어야한다.

제 3정규화

제 2정규화를 진행한 테이블에 대하여 이행적 종속이 없도록 테이블을 분해하는 것이다.
이행적 종속이란, A -> B, B -> C가 성립할 때 A -> C가 성립한느 것을 의미한다.

조건
1. 제 2정규화를 만족해야 한다.
2. 기본키가 아닌 속성들은 기본키에 의존한다.

예시)

현재 기본기는 {Tourment, Year}이다.
Winner는 이 두 복합키를 통해 결정된다. 하지만 Winner Date of Birth는 기본키가 아닌 Winner에 의해 결정되고 있다.


따라서 위와 같이 2개의 테이블로 분리하여 나타내야 제 3정규화를 만족할 수 있다.

BCNF 정규화

Boyce and Codd Normal Form의 약자. 3차 정규형을 조금 더 강화한 버전이라고 볼 수 있다. 이는 3차 정규형으로 해결할 수 없는 이상현상을 해결할 수 있다.

조건
1. 제 3정규화를 만족해야 한다.
2. 모든 결정자가 후보키 집합에 속한 정규형이다.

예시)

특강수강 테이블에서 기본키는 {학생번호, 특강이름}이다. 그리고 기본키가 교수를 결정하고 있다. 또한 여기서 교수는 특강이름을 결정하고 있다.
문제는 교수특강이름을 결정한느 결정자이지만, 후보키가 아니라는 것이다.


위와 같이 특강신청 테이블, 특강교수 테이블로 분해가 가능하다.

profile
꾸준함의 힘을 아는 개발자📍
post-custom-banner

0개의 댓글