juuuding

[데이터베이스] CH 7 릴레이션 정규화 (1) 본문

컴퓨터공학/데이터베이스

[데이터베이스] CH 7 릴레이션 정규화 (1)

jiuuu 2023. 5. 17. 01:02

 

■ 릴레이션 정규화

 - 부주의한 데이터베이스 설계는 제어할 수 없는 데이터 중복을 야기하여 여러 가지 갱신 이상을 유발함

 - 어떻게 좋은 데이터베이스 설계를 할 것인가? 데이터베이스에 어떤 릴레이션들을 생성할 것인가? 각 릴레이션에 어떤 애트리뷰트들을 둘 것인가?

 - 정규화는 주어진 릴레이션 스키마를 함수적 종속성기본키를 기반으로 분석하여, 원래의 릴레이션을 분해함으로써 중복과 세가지 갱신 이상을 최소화함

 

 

 

 정규화 개요

 

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가 기본키라면 키의 정의에 따라 → B와 A → C가 성립. 만일 C가 A외에 B에도 함수적으로 종속한다면 C는 A에 직접 함수적으로 종속하면서 B를 거쳐서 A에 이행적으로 종속

 

 

 

 릴레이션 분해

 

1.  릴레이션 분해

 - 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것

 - 릴레이션을 분해하면 중복이 감소되고 갱신 이상이 줄어드는 장점 but 잠재적 문제 야기

  * 조인이 필요 없는 질의가 분해 후에 조인을 필요로 하는 질의로 바뀔 수도

  * 분해된 릴레이션으로 원래의 릴레이션을 재구성하지 못할 수도 있음

 

 

2. 무손실 분해

 - 분해된 두 릴레이션을 조인하면 원래의 릴레이션에 들어 있는 정보를 완전하게 얻을 수 있음. 여기서 손실은 정보의 손실

 

 

+ 나쁜 분해를 진행하면 다시 그것을 조인했을 때 가짜 투플이 생길 수 있음