[데이터베이스] CH 7 릴레이션 정규화 (1)
■ 릴레이션 정규화
- 부주의한 데이터베이스 설계는 제어할 수 없는 데이터 중복을 야기하여 여러 가지 갱신 이상을 유발함
- 어떻게 좋은 데이터베이스 설계를 할 것인가? 데이터베이스에 어떤 릴레이션들을 생성할 것인가? 각 릴레이션에 어떤 애트리뷰트들을 둘 것인가?
- 정규화는 주어진 릴레이션 스키마를 함수적 종속성과 기본키를 기반으로 분석하여, 원래의 릴레이션을 분해함으로써 중복과 세가지 갱신 이상을 최소화함
정규화 개요
1. 좋은 관계 데이터베이스 스키마를 설계하는 목적
- 정보의 중복과 갱신 이상이 생기지 않도록 하고, 정보의 손실을 막으며, 실세계를 잘 나타내고, 애트리뷰트 간의 관계가 잘 표현되게 보장하고, 어떤 무결성 제약조건의 시행을 간단하게 하며, 효율성 측면도 고려
- 우선 갱신 이상이 발생하지 않도록 하고 그 다음 효율성 고려
2. 갱신 이상
- 수정 이상 : 반복된 데이터 중 일부만 수정하면 데이터의 불일치 발생
- 삽입 이상 : 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능
- 삭제 이상 : 유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능
3. 릴레이션 분해
- 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것
- 릴레이션의 분해는 필요한 경우에는 분해된 릴레이션들로부터 원래의 릴레이션을 다시 구할 수 있음을 보장해야 한다는 원칙을 기반
- 분해를 잘못하면 두 릴레이션으로부터 얻을 수 있는 정보가 원래의 릴레이션이 나타내던 정보보다 적을 수도 있고 많을 수도 있음
- 릴레이션의 분해는 릴레이션에 존재하는 함수적 종속성에 관한 지식을 기반으로 함
4. 정규형의 종류
- 제1,2,3 정규형, BCNF, (+제 3,4 정규형)
- 일반적으로는 데이터베이스 설계시 BCNF까지만 고려
5. 관계 데이터베이스 설계의 비공식적 지침
1) 이해하기 쉽고 명확한 스키마를 만들기
- 여러 엔티티 타입이나 관계 타입에 속한 애트리뷰트들을 하나의 릴레이션에 포함시키지 않음
(엔티티 타입과 관계 타입을 별도의 릴레이션으로 분리 -> 구조 명확, 유지보수& 쿼리 작성 용이)
2) 널값 피하기
3) 가짜 투플(불필요한 투플: 저장은 되지만 실제로는 의미가 없거나 중복된 정보 포함, 원래 릴레이션에 없던 투) 생기지 않게
4) 스키마 정제 (개선, 최적화)
함수적 종속성
1. 함수적 종속성의 개요
- 정규화 이론의 핵심
- 릴레이션의 애트리뷰트들의 의미로부터 결정됨
- 릴레이션 스키마에 대한 주장이지, 릴레이션의 특정 인스턴스에 대한 주장이 아님
- 릴레이션의 가능한 모든 인스턴스들이 만족해야 함
- 실세계를 기반으로 어떤 함수적 종속성이 존재하는지 파악해야 함
- 함수적 종속성은 제 2정규형부터 BCNF까지 적용됨
2. 결정자
- 어떤 애트리뷰트의 값은 다른 애트리뷰트의 값을 고유하게 결정할 수 있음
- 결정자는 주어진 릴레이션에서 다른 애트리뷰트(or 애트리뷰트 집합)를 고유하게 결정하는 하나 이상의 애트리뷰트를 의미
- A → B : A가 B를 결정한다, A는 B의 결정자이다
3. 함수적 종속성
- A → B 이면, B가 A에 함수적으로 종속하는 것
- A → B의 필요충분조건: 각 A값에 대해 반드시 한 개의 B값이 대응
4. 완전 함수적 종속성
- A → B에서, 애트리뷰트 A의 어떠한 진부분 집합에도 함수적으로 종속하지 않으면 애트리뷰트 B가 애트리뷰트 A에 완전하게 함수적으로 종속한다고 말함
- 애트리뷰트 A는 복합 애트리뷰트 A → B ex) (학번, 과목번호) → 학점
5. 이행적 함수적 종속성
- 한 릴레이션의 애트리뷰트 A,B,C가 주어졌을 때 애트리뷰트 C가 이행적으로 A에 종속한다(A→C)는 것의 필요충분조건
: (A → B) and (B → C)의 성립
- A가 기본키라면 키의 정의에 따라 A → B와 A → C가 성립. 만일 C가 A외에 B에도 함수적으로 종속한다면 C는 A에 직접 함수적으로 종속하면서 B를 거쳐서 A에 이행적으로 종속
릴레이션 분해
1. 릴레이션 분해
- 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것
- 릴레이션을 분해하면 중복이 감소되고 갱신 이상이 줄어드는 장점 but 잠재적 문제 야기
* 조인이 필요 없는 질의가 분해 후에 조인을 필요로 하는 질의로 바뀔 수도
* 분해된 릴레이션으로 원래의 릴레이션을 재구성하지 못할 수도 있음
2. 무손실 분해
- 분해된 두 릴레이션을 조인하면 원래의 릴레이션에 들어 있는 정보를 완전하게 얻을 수 있음. 여기서 손실은 정보의 손실
+ 나쁜 분해를 진행하면 다시 그것을 조인했을 때 가짜 투플이 생길 수 있음