티스토리 뷰

정규화 (Nomalization)

함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서 이상현상이 발생하지 않는 바람직한 릴레이션을 만들어가는 과정이다.

정규화를 통해 릴레이션은 무손실 분해 (nonloss decomposition) 되어야 한다.

  • 릴레이션은 의미적으로 동등한 릴레이션들로 분해되어야 하고 분해로 인한 정보 손실이 발생하지 않아야 한다.
  • 분해된 릴레이션들을 자연조인하면 (pk를 기준으로 조인 & 중복 컬럼은 제거) 전의 릴레이션으로 복원 가능해야 한다.

정규형 (Nomal Form)

  • 릴레이션이 정규화된 정도
  • 각 정규형마다 제약조건이 존재한다. 정규형이 높아질 수록 제약조건이 많아지고 엄격해지며 마찬가지로 릴레이션의 데이터 중복이 줄어 이상현상이 발생하지 않는 바람직한 릴레이션이 된다.
  • 릴레이션의 특성을 고려하여 적합한 정규형을 선택한다 (무조건 높은게 좋은게 아니다)

제 1 정규형

  • 릴레이션의 모든 속성이 더는 분해되지 않는 원자값(atomic value)만 가지는 정규형
  • 제 1정규형을 만족해야 관계형 DB 릴레이션이 될 자격이 있다.
예시
이름 취미
김연아 인터넷
추신수 영화, 게임

위와 같은 릴레이션은 제 1정규형을 만족하지 못한 것이다. 추신수의 취미인 영화와 게임을 분리해서 표현해야한다.

제 2 정규형

  • 릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되는 정규형
  • PK -> 각 속성들 (완전 함수 종속, 이때 pk의 부분 속성으로도 성립하면 불완전 함수 종속이다)
예시
학번 (PK) 수강과목 (PK) 강의실 성적
1001 데이터베이스 A101 A+
1002 운영체제 B102 A+
1003 네트워크 C103 A+

위 릴레이션의 경우 제 2 정규형을 만족하지 않는다.

  • (학번, 수강과목) -> 강의실, (학번, 수강과목) -> 성적에 대해서 성적은 (학번, 수강과목)에 완전 함수 종속이 성립한다.
    하지만, 강의실은 수강과목에도 완전 함수 종속한다. 즉, 강의실은 현재 기본키에 대해 불완전 함수 종속 관계이다.

따라서 이러한 릴레이션을 제 2 정규형이 성립하도록 분리하자.

학번 (PK) 수강과목 (PK) 성적
1001 데이터베이스 A+
1002 운영체제 A+
1003 네트워크 A+

 

수강과목 (PK) 강의실
데이터베이스 A101
운영체제 B102
네트워크 C103

위와같이 릴레이션을 분리함으로서

  • (학번, 수강과목) -> 성적
  • 수강과목 -> 강의실

로 기본키를 제외한 모든 속성이 기본키에 완전 함수 종속 되도록 하였다.

 

문제점

제 2 정규형에서는 여전히 삽입, 삭제, 갱신 이상 현상이 발생할 수 있는데 이는 이행적 (transtive) 함수 종속이 존재할 수 있기 때문이다.

고객 ID (PK) 등급 할인율
samsung SILVER 10%
apple GOLD 8%

위 릴레이션은 고객 ID -> 등급, 등급 -> 할인율의 완전 함수 종속 관계가 있고, 이행적 함수 종속으로 인해 고객 ID -> 할인율을 완전 함수 종속하게 된다.

  • 고객 ID -> 등급 , 등급 -> 할인율로 이어지는 이행적 함수 종속이 발생한다.

1. BRONZE 고객이 없는데 등급과 할인율을 넣고자 하는 경우 NULL값으로 인해 삽입 이상이 발생한다.

2. GOLD 고객이 하나 더 들어오는 경우 할인율이 변경될 때 부분 변경으로 인해 갱신 이상이 발생할 수 있다.

3. SILVER 고객이 한명일 때 삭제할 경우 등급-할인 정보도 같이 삭제되는 삭제 이상이 발생한다.

제 3 정규형

  • 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않으면 제 3 정규형을 만족한다.
  • 정리 : 기본키가 아닌 모든 속성들은 기본키에 완전 함수 종속하면서 이행적 함수 종속하지 아니한다.
예시
고객 ID (PK) 등급 할인율
samsung SILVER 10%
apple GOLD 8%

위 릴레이션은 고객ID->등급, 등급-> 할인율로 이어지는 이행적 함수 종속 관계가 존재하므로 이를 분리하도록 한다.

고객 ID (PK) 등급
samsung SILVER
apple GOLD

 

등급 (PK) 할인율
SILVER 10%
GOLD 8%
  • 고객ID -> 등급
  • 등급 -> 할인율
  • 두개의 릴레이션으로 분리함으로서 제 3 정규형을 만족시킨다.

BCNF

  • 릴레이션에 존재하는 함수 종속성에서 모든 결정자가 후보키인 정규형
  • 릴레이션에서 X -> Y 가 성립할 때 모든 결정자 X가 후보키인 것
예시
학번 특강명 교수
101 데이터베이스의 미래 최똥꼬
102 네트워크의 퓨처 김바보
103 자바의 길 최바보
104 자바의 길 홍바보
105 데이터베이스의 미래 최똥꼬

위 릴레이션은 (학번, 특강명) -> 교수 의 완전 함수 종속 관계를 갖고있다. 현재 제 1, 제 2, 제 3 정규형을 만족한다.

 

이때 교수 한명은 하나의 특강만을 가질 수 있고, 학생은 하나의 특강만 신청가능하다 라고 해보자.

그러면 교수 -> 특강명 에서 완전 함수 종속 관계가 나타나게 된다.

즉, 교수가 결정자가 되는데 이때 교수는 위 릴레이션의 후보키가 아니다. 교수 -> 특강명은 성립하지만 교수와 학번 사이에는 완 전함수 종속 관계가 성립되지 않는다.

 

따라서 교수 -> 특강명 관계를 분리해서 따로 릴레이션을 만들고, 학생이 교수를 신청하도록 하여 학번 - 교수 릴레이션을 따로 만든다.

교수 특강명
최똥꼬 데이터베이스의 미래
김바보 네트워크의 퓨처
최바보 자바의 길
홍바보 자바의 길
최똥꼬 데이터베이스의 미래

 

학번 교수
101 최똥꼬
102 김바보
103 최바보
104 홍바보
105 최똥꼬

위와 같이 결정자 교수가 후보키에 속하지 않았으므로 기존 릴레이션에서 제거하고 새로운 릴레이션을 생성하였다. 이때 학번이 교수와 테릴레이션을 구성하는데 만약 교수 대신 특강명을 하게 되면 어떤 교수의 특강인지 알지 못하므로 자연조인 시 기본 릴레이션과 다른 컬럼을 갖게 된다.

무손실 분해
제대로 정규형으로 분해 했다는 것은 R -> R1, R2로 분해했을 때 무손실 분해가 됐다는 것이다. 이것은 R1 조인 R2 = R 일 경우를 말한다. 또는 R1 교집합 R2 == R1 || R2 이다.
대부분의 정규형은 BCNF 정규형까지 진행하고 여기까지 진행하면 대부분의 이상현상은 사라지게 된다.
NoSql
일반적인 RDS와 다르게 키-값, 그래프, 문서와 같은 구조를 사용하는 DB이다. 데이터가 지켜야할 일관성 제약조건 등이 약하거나 없는 경우 빠른 연산을 위해 유연한 데이터 구조를 갖도록 하기 위해 고안된 방식이다. 보통 빅데이터나 실시간 웹 응용에 사용된다.
반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday