티스토리 뷰
정규화 (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이다. 데이터가 지켜야할 일관성 제약조건 등이 약하거나 없는 경우 빠른 연산을 위해 유연한 데이터 구조를 갖도록 하기 위해 고안된 방식이다. 보통 빅데이터나 실시간 웹 응용에 사용된다.
'CS > 데이터베이스 정리' 카테고리의 다른 글
데이터베이스 개론과 실습 4주차 - 이상현상과 함수종속 (0) | 2021.10.15 |
---|---|
데이터베이스 개론과 실습 3주차 - 관계대수 (집합연산, 관계연산) (0) | 2021.10.01 |
데이터베이스 개론과 실습 2주차 - 관계 데이터 모델 (0) | 2021.09.19 |
데이터베이스 개론과 실습 1주차 - 데이터베이스 시스템 (0) | 2021.09.11 |
- Total
- Today
- Yesterday